zapisywanie i wczytywanie w pascalu

0

Witam , mam do napisania program ktory wczytuje zapisauje dodaje, edytuje i wyswietla dane, mam problem z zapisaniem i wczytaniem, oto co stworzylem:

procedure wczytaj;
begin
assign(plik,'C:\zag.txt');
reset(plik);
while not EOF(plik) do
begin
ile:=0;
inc(ile);
read(plik,_Zaglowki[ile]);
end;
close(plik);
end;

procedure zapisz;
begin
assign(plik,'c:\zag.txt');
rewrite(plik);
for i:=1 to ile do
write(plik,_Zaglowki[ile]);
close(plik);
end;

Niestety nie chce zapisaywac ani wczytywac, co zrobic zeby dzialało, prosze o pomoc:)

0
gumis napisał(a)

Witam , mam do napisania program ktory wczytuje zapisauje dodaje, edytuje i wyswietla dane, mam problem z zapisaniem i wczytaniem, oto co stworzylem:

procedure wczytaj;
begin
assign(plik,'C:\zag.txt');
reset(plik);
while not EOF(plik) do
begin
ile:=0;
inc(ile);
read(plik,_Zaglowki[ile]);
end;
close(plik);
end;

procedure zapisz;
begin
assign(plik,'c:\zag.txt');
rewrite(plik);
for i:=1 to ile do
write(plik,_Zaglowki[ile]);
close(plik);
end;

Niestety nie chce zapisaywac ani wczytywac, co zrobic zeby dzialało, prosze o pomoc:)

Błąd tkwi w lini:

WHILE NOT Eof(Plik) DO
BEGIN
 Ile := 0; { <== tu jest błąd }
 Inc(Ile);
  :
  :
END;

Jeżeli chcesz aby program działał poprawnie to musisz zmienne inicjować przed rozpoczęciem pętli, tyczy się to wszystkich przypadków. Manewr, który wykonałeś powoduje, że zmienna Ile przyjmuje maksymalną wartość 1, Patrz:
i := 0;
i := i+1; czyli 0+1
i := 0;
i := i+1; czyli 0+1
i := 0;

Jeżeli zrobisz:

Ile := 0;
WHILE NOT Eof(Plik) DO
BEGIN
 Inc(Ile);
END;

To zmienna Ile rzeczywiście będzie inkrementowana.

0

Nie mam pod ręką kompilatora ale do tego o czym powiedział Oleksy Adam dołożyłbym jeszcze parę innych zmian. Spróbuj skompilować to w takiej postaci:

procedure wczytaj;
begin
  assign(plik,'C:\zag.txt');
  reset(plik);
ile:=0;  //to o czym mówił Oleksy Adam
while not EOF(plik) do
begin
inc(ile);
readln(plik,_Zaglowki[ile]); //readln zamiast read
end;
close(plik);
end;

procedure zapisz;
begin
assign(plik,'c:\zag.txt');
rewrite(plik);
for i:=1 to ile do
writeln(plik,_Zaglowki[i]); // writeln zamiast write + "i" zamiast "ile"
close(plik);
end;
0

Dzieki bardzo, program dziala jak nalezy, jeszcze raz dziekuje:)

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