Czytanie pliku Textowego "od tyłu"

0

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 :(

0
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 :)

0

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;
0

Dziękuję za pomoc :) Juz od kilku H przeglądam zasoby stronki i wiem o wiele więcej ;D

Pozdrawiam

0

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ę?:)

0

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.

0

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;

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