[ overdose @ 10.09.2004. 17:35 ] @
Moje nesrecno resenje je:

Code:

n:=0;
  while not eof(ulaz) do
    begin
      readln(ulaz);
      n:=n+1
    end;


n dobije broj linija, ali se program prekine zbog greske. Izgleda zbog readln u poslednjoj iteraciji, jer 'sledeca linija' je eof. Nesto sam zaglupeo, pa ako moze neko da ispise par linija ;) Bacio sam i kod ako nekog zanima zasto mi treba ovo.
[ neor @ 10.09.2004. 18:08 ] @
Gresku dobijes verovatno zato sto poslednja linija u fajlu nema oznaku za kraj linije.
Taj slucaj moras da predvidis.
Ako je u pitanju TP onda mozes da iskljucis IO greske sa {$I-} i proveravas IOResult posle svake operacija nad fajlom kako bi uhvatio gresku i sam obradio taj slucaj.

Drugi nacin je da ne koristis readln vec obican read i trazis i EOL i EOF.
[ reiser @ 10.09.2004. 19:15 ] @
Meni ovo tvoje resenje dobro radi ??? Probao sam sve kombinacije #13 i #10 na kraju fajla (i kombinaciju bez njih), i program ne izbacuje gresku.

Inace, vidi i ovo, mozda ti pomogne :
Code:

var
  SFile : Text;
  n     : Integer;
  Buf   : Array[1..2048] of Char;
  NRead : Integer;
begin
  n := 0;
  Assign(SFile, 'C:\1.txt');
  Reset(SFile, 1);
    repeat
      BlockRead(SFile, Buf, SizeOf(Buf), NRead);
      While Pos(#13#10, Buf) > 0 Do
        If Pos(#13#10, Buf) > 0 Then
        Begin
          Inc(n);
          Buf[Pos(#13#10, Buf)] := '0';
        End;
    until NRead <> SizeOf(Buf);
    If Buf[NRead] <> #13#10 Then
      Inc(n);
  Close(SFile);


[Ovu poruku je menjao Marko Paunovic dana 11.09.2004. u 12:06 GMT]
[ morlic @ 10.09.2004. 21:42 ] @
Evo koda koji je kraci ako nista drugo :)

Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  With TStringList.Create do
    try
      LoadFromFile('c:\fajl.txt');
      ShowMessageFmt('Broj linija %d', [Count])
    finally
      Free;
    end;
end;
[ reiser @ 10.09.2004. 22:47 ] @
TStringList klasa ne postoji u Pascalu ako se ne varam...
[ morlic @ 11.09.2004. 07:33 ] @
Pa krajnje je vreme da se unapredi :), a koliko se secam nema ni AssignFile procedure.
[ overdose @ 11.09.2004. 08:56 ] @
Citat:
Gresku dobijes verovatno zato sto poslednja linija u fajlu nema oznaku za kraj linije. Taj slucaj moras da predvidis.


Nije to u pitanju. Udario sam <ENTER> i posle poslednje linije. Prikacio sam ulaznu datoteku uz poruku.

Citat:
Drugi nacin je da ne koristis readln vec obican read i trazis i EOL i EOF.


Hm, probao sam i ovu kombinaciju (while u while-u i citanje broj po broj), ali dobijam isti problem. Evo tacnog opisa greske:

./jun_02: attempt to read past end of file `jun_02_ulaz.txt' (error #454 at 804a02b)

Uzgred budi receno, moram da se koristim standardnim Pascal-om !

OvEr
[ neor @ 11.09.2004. 09:19 ] @

Ovaj tvoj kod radi na Delphiju a nemam trenutno ni jedan drugi Pascal instaliran.
Probaj da stavis i neku string varijablu u readln a u slucaju da koristis read obavezno stavi char.
[ reiser @ 11.09.2004. 09:48 ] @
Citat:
morlic: Pa krajnje je vreme da se unapredi , a koliko se secam nema ni AssignFile procedure.



Moja greska za AssignFile, evo ispravio sam u gornjoj poruci
[ reiser @ 11.09.2004. 10:07 ] @
Inace, mislim da ovaj kod zavrsava posao :

Code:

var
  SFile : Text;
  n     : Integer;
  FLine : String;
  C1    : Integer;
  Added : Boolean;
begin
  n := 0;
  Assign(SFile, 'C:\1.txt');
  Reset(SFile);
    While Not Eof(SFile) Do
    Begin
      ReadLn(SFile, FLine);
      Added := FALSE;
      For C1 := 1 to Length(FLine) Do
        If (FLine[C1] = #10) or
           (FLine[C1] = #13) THen
        Begin
          Added := TRUE;
          Inc(n);
        End;
      If not Added Then
        Inc(n);
    End;
  Close(SFile);
  WriteLn(n);
  ReadLn;
[ anon315 @ 31.01.2005. 10:09 ] @
Code:

n:=0;
while not eof(ulaz) do
  begin
    readln(ulaz);
    n:=n+1
  end;
{* !!! *}
close(ulaz);
reset(ulaz);
[ milan_kol @ 03.02.2005. 22:24 ] @
Moras posle brojanja linija opet resetovati fajl, jer pokazivac stoji na kraju fajla u tom trenutku, i bilo sta da pokusas iza toga da uradis bez reset() nece ti raditi!

a inace taj kod, prvi sto si stavio, bi trebao da radi posao...
[ Srki_82 @ 03.02.2005. 23:04 ] @
Ne secam se tacno svih komandi za rad sa fajlovima u TP, ali znam da neke funkcije ne mogu da se koriste za Text tip fajlova. Mozda Eof za Text tip radi (ili mozda ne radi uopste) nekako drugacije?
Sve u svemu ako stvarno nece sa Eof, slobodno koristi {$I-}. To je takodje cist Pascal.
Code:
{$I-}
var
  F: Text;
  N: Integer;
begin
  N := 0;
  Assign(F, 'NekiFajl.txt');
  Reset(F);
  While IOResult = 0 do
  begin
    ReadLn(F);
    if IOResult = 0 then Inc(N);
  end;
  Close(F);
  WriteLn('Broj linija je:',N);
  ReadLn;
end;