Dziwny blad odczytu pliku

0

mam taki kodzik:

var
  slowka:array [1..100]of string;
  ciag:array[1..50]of array[1..2]of string;

// ...

procedure TForm1.Button1Click(Sender: TObject);
var f:textfile; t:string; c:char; i,j:integer;
begin
i:=1; j:=1;
assignfile(f,'tekst.txt');
reset(f); 
while not eof(f) do
 begin
 read(f,c);
 if c=':' then
   begin
   readln(f,t);
   slowka[i]:=t;
   i:=i+1;
   end else
 if c=';' then
   begin
   t:='';
   while not eoln(f) do
    begin
    read(f,c);
    if c<>'|' then
    t:=t+c else
    if c='|'then
      begin
      ciag[j][1]:=t;
      readln(f,t);
      ciag[j][2]:=t;
      j:=j+1;
      end;
    end;
 end;
closefile(f);
if slowka[1]='cos' then form1.Color:=clred;
end;

przy odczytywaniu przy lini:

while not eof(f) do

wywala blad: I/O error 104. W pomocy pisze ze nie otworzylem pliku do odczytu, ale przeciez jest to (reset) chyba ze chodzi o cos innego. Jeszcze takiego czegos nie mam, probowalem juz roznych rzeczy ale nic nie dziala :(

Aha, w razie czego, plik testowy (tekst.txt) wyglada tak:
:cos
:cosik
;1|2

z gory dzieki

PS. Mimo ze wywala blad to plik odczytuje, tzn kolor formy ulega zmianie na czerwony.

0

Hm, dziwna koza.....

A tak na poważnie, czy plik cośtam.txt jest w tym samym katalogu co aplikacja, czy w innym (ale wtedy wyłożyłoby się chyba reset(f)).

I czy pętla while sypie się za pierwszym razem, czy może coś robi przed zwałką?

0

Co do dziwnoty to wiem, bo wywala blad, a niby sie robi (albo i nie.

Jest w tym samym, nawet po zmienieniu na:

assignfile(f,extractfilepath(application.exename)+'tekst.txt');

jest to samo.

Wiem ze reset(f) sie sypie bo nawet jak usune te linie to jest taki sam blad i efekt, to samo jesli walne 2 reset'y, itd.

Ja juz sam niewiem jak to jest z ta petla, ale na moje oko, zaraz po tym jak dojdzie do tej lini z poczatkiem (odwolaniem, warunkiem) petli sie cos wali, dokladnie jakby nie widzial reset'a (tyle wyczytalem z pomocy) ale za zadne skarby to nie chce sie dac u mnie naprawic. Help! :)

0

a probowales usunac ten kawalek na samym poczatku "while not eof(f) do" ....

0

Ha, na powyższym przykładzie widać dlaczego powinno się stosować wcięcia w kodzie :-) .

Przed CloseFile wstaw end; i powinno hulać jak trza (po prostu wewnątrz pętli zamykałeś plik, i kiedy kod pętli zaczynał sie wykonywać jeszcze raz instrukcja Eof(F) odnosiła się do zamkniętego pliku).

0

Faktycznie !!!! Musze przyznac ze tego nie zauwazylem. Ale gapa ze mnie :P

0

ze mnie tez, dzieki

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