Ok, wir versuchen es mal ohne irgendwelche Stringlisten, Objekte oder Datenbanken, sondern (wie früher
) mit einer verketteten Liste und typisierten Dateien.
Dazu brauchst du zwei Funktionen/Prozeduren, eine um den gesamten Speicherinhalt mit einen Schwunf auf die Platte zuschreiben und eine für Platte-->Speicher. Das dürfte mit deinen vorkenntnissen das einfachste sein.
Code sagt manchmal mehr als tausend Worte: So stell ich mir das vor:
TypenDefinition:
Delphi-Quellcode:
type TDatensatz={packed} record
Art_Nr:integer;
//Hier alle Variablen für einen Artikel definieren
end;
//jetzt deine Liste (wie auch immer du die gerne machst)
type PItem=^TItem
TItem=record
next,prior:PItem;
Artikel:TDatensatz;
end;
Soweit dazu. Und wie du jetzt prinzipiell mit Listen arbeitest, weist du ja, schreib ich jetzt nicht extra auf.
Das "packed" vor dem "record", kannst du auskommentieren, dadurch wird der benötigte Speicherplatz nachher auf der Platte etwas geringer, mit dem Nachteil, dass das Programm länger braucht. Allerdings wird beides bei dem zu erwartenden Programmeinsatz nicht bemerkbar sein -->deswegen ist es egal
Jetzt zum Speichern. eine typisierte Datei wird mit "file of [typ]" definiert und dann kannst du diesen Typ dort beliebig rein schreiben und lesen (günstigerweise nehmen wir als Typ useren record:
Delphi-Quellcode:
procedure alles_speichern;
var Datei:file of TDatensatz;
item:PItem;
//...
begin
assignfile(Datei,'test.dat'); //Den Dateinamen kannst du natürlich auch vorher noch abfrage´n, oder sonstwo ablegen (mit Pfadangabe)
rewrite(Datei); //hier wird die Datei neu erstellt, eine bereits vorhanden Date wird zuvor gelöscht
item:=start; //start ist anfang der Liste
while item<>nil do begin
//hier musst du jetzt mit einer Schleife durch alle datensätze gehen
//speichern tust du mit
write(Datei,item^.Artikel);
item:=item^.next;
end;
closefile(Datei); //schließen
end;
procedure alles_einlesen
var Datei:file of TDatensatz;
item,tmp:PItem;
//...
begin
//hier Liste löschen
assignfile(Datei,'test.dat');
if fileexists('test.dat') then begin
reset(Datei); //hier wird die Datei geöffnet
start:=nil;
item:=nil;
while not eof(Datei) do begin //eof=end of file
new(tmp);
read(Datei,tmp^.Artikel); //einlesen
//Liste vervollständigen
if start=nil then start:=tmp;
if item=nil then begin
item:=tmp;
item^.prior:=nil;
item^.next:=nil;
end else begin
item^.next:=tmp;
tmp.^prior:=item;
item:=tmp;
end;
end;
closefile(Datei); //schließen
end else //Datei existiert nicht
end;
Du kannst auch nur einzelne Datensätze ändern. Mit "seek" kannst du auf den entsprechenden Datensatz springen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.