Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Parce koda za brojanje linija u text datoteci

[es] :: Pascal / Delphi / Kylix :: Parce koda za brojanje linija u text datoteci

[ Pregleda: 4443 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

overdose

Član broj: 33563
Poruke: 51
*.cvz.es



Profil

icon Parce koda za brojanje linija u text datoteci10.09.2004. u 17:35 - pre 237 meseci
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.
Prikačeni fajlovi
 
Odgovor na temu

neor
Nenad Orlovic

Član broj: 26828
Poruke: 74
*.ftn.ns.ac.yu



Profil

icon Re: Parce koda za brojanje linija u text datoteci10.09.2004. u 18:08 - pre 237 meseci
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.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Parce koda za brojanje linija u text datoteci10.09.2004. u 19:15 - pre 237 meseci
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]
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.254.EUnet.yu



+1 Profil

icon Re: Parce koda za brojanje linija u text datoteci10.09.2004. u 21:42 - pre 237 meseci
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;
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Parce koda za brojanje linija u text datoteci10.09.2004. u 22:47 - pre 237 meseci
TStringList klasa ne postoji u Pascalu ako se ne varam...
 
Odgovor na temu

morlic
Milos Orlic
Beograd

Član broj: 6081
Poruke: 735
*.223.EUnet.yu



+1 Profil

icon Re: Parce koda za brojanje linija u text datoteci11.09.2004. u 07:33 - pre 237 meseci
Pa krajnje je vreme da se unapredi :), a koliko se secam nema ni AssignFile procedure.
 
Odgovor na temu

overdose

Član broj: 33563
Poruke: 51
*.cvz.es



Profil

icon Re: Parce koda za brojanje linija u text datoteci11.09.2004. u 08:56 - pre 237 meseci
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
Prikačeni fajlovi
 
Odgovor na temu

neor
Nenad Orlovic

Član broj: 26828
Poruke: 74
*.metrohive.net



Profil

icon Re: Parce koda za brojanje linija u text datoteci11.09.2004. u 09:19 - pre 237 meseci

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.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Parce koda za brojanje linija u text datoteci11.09.2004. u 09:48 - pre 237 meseci
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
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Parce koda za brojanje linija u text datoteci11.09.2004. u 10:07 - pre 237 meseci
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;
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.dialup.sezampro.yu.



+13 Profil

icon Re: Parce koda za brojanje linija u text datoteci31.01.2005. u 10:09 - pre 233 meseci
Code:

n:=0;
while not eof(ulaz) do
  begin
    readln(ulaz);
    n:=n+1
  end;
{* !!! *}
close(ulaz);
reset(ulaz);
 
Odgovor na temu

milan_kol
Beograd

Član broj: 6463
Poruke: 113
*.verat.net.



Profil

icon Re: Parce koda za brojanje linija u text datoteci03.02.2005. u 22:24 - pre 233 meseci
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...
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Parce koda za brojanje linija u text datoteci03.02.2005. u 23:04 - pre 233 meseci
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;

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Parce koda za brojanje linija u text datoteci

[ Pregleda: 4443 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.