Nie wiem, czy to jest dobry pomysł. Globalnie zadeklarowałem sobie 2 listy
DaneLista, Wiersz: TStringList;
A teraz nie wiem, za bardzo w którym miejscu je zwolnić. Czy może ktoś zerknąć i naprowadzić mnie. Z góry serdecznie dziękuję. Poniżej listing:
program danetstringlist;
uses
SysUtils, Classes;
var
DaneLista, Wiersz: TStringList;
NazwaPliku: string = 'dane.txt';
procedure OdczytajPlik(const NazwaPliku: string);
var
id, Personalia, Wiek, Linia: string;
i: Integer;
begin
DaneLista := TStringList.Create;
Wiersz := TStringList.Create;
try
if FileExists(NazwaPliku) then
begin
DaneLista.LoadFromFile(NazwaPliku);
for i := 0 to DaneLista.Count - 1 do
begin
Linia := DaneLista[i];
Wiersz.Delimiter := '|'; // Separator w pliku
Wiersz.StrictDelimiter := True;
Wiersz.DelimitedText := Linia;
if Wiersz.Count = 3 then
begin
id := Wiersz[0];
Personalia := Wiersz[1];
Wiek := Wiersz[2];
// Dla sprawdzenia wyświetl dane (na konsoli)
Writeln('Id: ', id);
Writeln('Imię i Nazwisko: ', Personalia);
Writeln('Ilość Wiosen: ', Wiek);
end;
end;
end
else
Writeln('Plik "', NazwaPliku, '" nie istnieje.');
finally
// jak zwalniam listy w tym miejscu dostaję ACCESS reading,
// że czytam po pamięci, która została zwolniona
// DaneLista.Free;
// Wiersz.Free;
end;
end;
procedure WypiszStringList(const Dane: TStringList);
var
i: Integer;
begin
for i := 0 to Dane.Count - 1 do
WriteLn(Dane[i]);
end;
begin
OdczytajPlik(NazwaPliku);
WypiszStringList(DaneLista);
Readln;
end.
Dane w pliku dane.txt:
1|Adaś Pierwiosnek|9
2|Madzia Poziomka|11
3|Franek Motylek|8
4|Hania Malina|7