Operacje na plikach txt

0

witam all

tym razem mam kolenjen2 pytanie , ale odnosnie operacji na plikach txt

  1. jak w pliku txt skasować konkretna linię np. 5 linie od góry

  2. jak do pliku txt wstawic w konkretna linie ciag znaków ( jakis łańcuch)

  3. jak zamienić konkretna linie innym ciagiem txt

thx za pomoc. prosze o konkretne przykłady

--GeniusWarez Will Reborn.

0

Spróbuj użyć Memo - wczytaj z pliku, pomieszaj dane i zapisz z powrotem. Na przykład...

0

własnie tak teraz robie, ale chce pominąc ten komponet i wykonywac to bezposrednio--GeniusWarez Will Reborn.

0

Rzeczywiście, bez sensu jest używanie Memo. Zabiera ono dużo miejsca w pamięci. Do wczytania i usuwania linijek lepiej użyć TStringList. Procedury są identyczne jak dla Memo.Lines. Obawiam się, że bardziej bezpośrednio się nie da. Trzeba by otrzymać bezpośredni dostęp do dysku, a do tego chyba musiałbyś użyć czegoś bardziej niskopoziomowego.

0

genius23 napisał:
własnie tak teraz robie, ale chce pominąc ten komponet i wykonywac to bezposrednio
&gt
Otwórz plik, odczytuj linijki i zapisuj. Jeżeli napotkasz na 5 linijkę to ją opóść.
--Jest jeszcze jeden błąd ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

Np. tak możesz zrobić:

var
Plik1, Plik2 : TextFile;
Linia : string;
Nr : Integer;
begin
Nr := 0;
AssignFile(Plik1, 'c:\q.txt');
AssignFile(Plik2, 'c:\q1.txt');
Reset(Plik1);
ReWrite(Plik2);
while not Eof(Plik1) do
begin
Inc(Nr);
Readln(Plik1, linia);
if Nr = 5 then Continue;
WriteLn(Plik2, linia);
end;
CloseFile(Plik1);
Erase(Plik1);
CloseFile(Plik2);
AssignFile(Plik2, 'c:\q1.txt');
Rename(Plik2, 'c:\q.txt');
end;--Jest jeszcze jeden błąd ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

moze opisze dokładniej problem
chodzi mi ty przede wszystkim o wykorzystanie plików i listview.
Jezeli wykasuje z listview jakas pozycje to chciałbym zeby ona automatycznie tez znikła z pliku skąd pobierane są dane dla listview

a co do memo to jest to faktycznie czasochłonne i działnie nie wygląd zbyt estetyczne
przy 200 pozycjach operacja ta zajmuje nawet 10 sek--GeniusWarez Will Reborn.

0

&gta co do memo to jest to faktycznie czasochłonne i działnie nie wygląd zbyt estetyczne
&gtprzy 200 pozycjach operacja ta zajmuje nawet 10 sek
&gt
Przeczytaj artykuł na temat optymalizacji na www.borland.pl, który LKS podawał w temacie dotyczącym szybkiego wyświetlania obrazków. To powinno przyspieszyć operacje na memo.

&gtchodzi mi ty przede wszystkim o wykorzystanie plików i listview.
&gtJezeli wykasuje z listview jakas pozycje to chciałbym zeby ona automatycznie tez znikła z pliku skąd pobierane są dane dla listview
&gt
Przecież możesz wykorzystać kod który podałem. W momencie, kiedy zostanie usunięta jakaś linijka z ListView wywołaj procedurę (przerobób kod, który podałem na procedurę) z parametrem będącym nr lini.
Jeżeli to będzie wciąż za wolne, to przerób to wykorzystując TFileStream i TMemoryStream. Odczytaj plik przy użyciu TFileStream i usuwaj linie kopiując do TMemoryStream. Potem tylko przyporządkuj TMemoryStream do TFileStream i gotowe. (chyba, że są to duże pliki, to wówczas użyj dwóch TFileStream)--Jest jeszcze jeden błąd ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

Wytłumacze ci to na przykładzie skrypty QBasic:

w = 5 * numer wiersza
l$ = "a" * litera
open "dane.txt" fot input as #1 * otwieram plik i zapisuje go jako #1
p = 1 * zmienna numeru wiersza
do * pętla
if p = w then * jeśli nwmer wiesza zgadza się z wybranym wcześniej...
write #1, l$ * zapisz literę
end if
p = p + 1 * dodaj numer wiersza
loop while eof(1) -1

1 użytkowników online, w tym zalogowanych: 0, gości: 1