Witam!
Mam 'ogromny' problem z dwoma procedurami w programie opartym na liście podwieszanej. Nie mam pojęcia jak zapisać dane z listy do pliku, próbuje póki co w jakiś sposób zrobić równoległy zapis dwóch type'ów. Wynikiem są ciągłe crashe lub niedziałanie w sposób zamierzony przeze mnie. Mógłby ktoś rzucić okiem na te bzdury?
type
kategoria=^podkat;
zad=^dane;
podkat=record
kat:string; {nazwa kategori}
nast:kategoria; {nastepne pyt/odp w kategori}
zadania:zad; {lista zadan w podkategoriach}
end;
dane=record
pytanie,odpowiedz:string; {tresc pytania i odp}
nast:zad; {nastepne pytanie}
end;
procedure zapisz_plik(ka:kategoria; nazwa:string);
var
plik_bin: file of podkat;
bpodk:kategoria;
rekord:podkat;
rekord2:dane;
bzad:zad;
begin
writeln;
if(ka=nil) then
writeln('Brak danych do zapisania!')
else
begin
assign(plik_bin, nazwa);
rewrite(plik_bin);
bpodk:=ka;
while (bpodk<>nil) do
begin
bzad:=bpodk^.zadania;
while (bzad<>nil) do
begin
rekord.kat:=bpodk^.kat;
rekord2.pytanie:=bzad^.pytanie;
rekord2.odpowiedz:=bzad^.odpowiedz;
write(plik_bin, rekord);
bzad:=bzad^.nast;
end;
writeln;
bpodk:=bpodk^.nast;
end;
close(plik_bin);
end;
end;
procedure odczyt_plik(nazwa:string);
var
plik_bin: file of podkat;
rekord: podkat;
rekord2: dane;
begin
assign(plik_bin, nazwa);
{$I-}
reset(plik_bin);
{$I+}
if ioresult=0 then
begin
while not eof(plik_bin) do
begin
read(plik_bin, rekord);
Dodaj(glowa,rekord.kat,rekord2.pytanie,rekord2.odpowiedz);
end;
close(plik_bin);
writeln('Wczytano!');
end
else
writeln('Plik nie istnieje!');
end;