Hi !
macie jakiś pomysł na odczytanie 10 ostatnich lini z pliku tekstowego? Pisze pewien prog, który bada spore pliki (10 - 25 MB) z logami, na dodatek część pobiera po sieci :(
var
plik : file of byte;
s : string;
i : integer;
znak : char;
begin
Assign(plik, 'c:\plik.txt');
Reset(plik);
for i := FileSize(plik) downto FileSize(plik)-10 do
begin
Read(plik, znak);
s := s + znak;
end;
end;
Jak bys uzyl wyszukiwarki to bys znalazl
http://4programmers.net/Forum/viewtopic.php?id=13443&post=13506#13506
I z tamtej odpowiedzi da sie odpowiedziec :>
A co do kodu to nie wiem cyz dziala bo napisalem go wlasnie teraz :) Chyba cos przy Read(plik, znak) jest nie tak ale generalnie to tak ma wygladac :)
var
plik : file of byte;
s : string;
i : integer;
znak : char;
begin
Assign(plik, 'c:\plik.txt');
Reset(plik);
for i := FileSize(plik) downto FileSize(plik)-10 do
begin
read(plik, znak);
s := s + znak;
end;
end;
Czy to przypadkiem nie odczyta 10 pierwszych znakow? :>
Raczej powinno byc:
var
plik : file of byte;
s : string;
znak : char;
begin
Assign(plik, 'c:\plik.txt');
Reset(plik);
Seek(plik, FileSize(plik) -10);
while not Eof(plik) do begin
read(plik, znak);
s := s + znak;
end;
end;
Dziękuję za pomoc :) Juz od kilku H przeglądam zasoby stronki i wiem o wiele więcej ;D
Pozdrawiam
Hi !
macie jakiś pomysł na odczytanie 10 ostatnich lini z pliku tekstowego?
A Wy (Pedros i Welvorine) czytacie po 10 znaków. Na koncu MichalDCK mowi ze wlasnie o to mu chodzilo , hehe , no to o co wlasciwie chodzilo? o 10 linijek w pliku textowym czy o 10 bajtow?:)))))))))) A moze ja niedowidzę?:)
Wiem juz jaka jest zasada. Z pliku, któy soprawdzam wyciagam 300 ostatnich znaków i poszukuje określonego łańcucha znaków (backup completed), który to zawsze jest umieszczony tak około 4 - 6 linijki od konca.
Spox MichalDCK. Jesli juz wybrales taką metode to proponuje odczytac te 300 znakow za jednym razem i dopiero przegladac - czytanie z pliku bajtow bajt po bajcie to chyba najdluzszy sposob odczytywania jaki mozna sobie wyobrazic. A wiec lepiej na przyklad tak:
var m,f:Tstream;
begin
f:=Tfilestream,create('c:\plik.txt',fmopenread);
m:=Tmemorystream.create;
f.position:=f.size-300;m.copyfrom(f,300);
m.position:=0; * i teraz sobie czytasz te 300 znakow np. za pomocą m.read, albo *bezposrednio korzystajac ze wskaźnika m.memory
f.free;m.free;
end;