Hallo!
Ich habe folgendes Problem: In meinem Programm, welches CDs verwaltet, kann ich das dynamische Array in der Listbox nach Interpret (alphabetisch) sortieren, wenn ich neue Datensätze eingebe. Aber wenn ich eine Datei öffne, wird diese nicht sortiert, stattdessen kommen nur Nullen. Was mache ich falsch?
Dies ist der entsprechende Quelltext:
Delphi-Quellcode:
implementation {$R *.dfm}
type tCDname=Record
interpret, album:string[20];
end;
type tEintrag=Record
CDname:tCDname;
genre:string[15];
jahr:integer;
preis:real;
end;
type
tAlleCDs = Array of tEintrag;
var
daten:tAlleCDs;
i:integer;
Datei öffnen:
Delphi-Quellcode:
{Datenbank öffnen}
procedure TForm1.Datenbankffnen1Click(Sender: TObject);
VAR Zeile : string;
datei:textfile;
begin
cd_listbox.Items.clear;
if oeffnen_dialog.Execute then
begin
AssignFile (Datei,oeffnen_dialog.Filename);
Reset (Datei);
while not eof (Datei) do
begin
SetLength(daten,Length(daten)+1);
i:=i+1;
Readln (Datei, Zeile);
cd_listbox.Items.Add (Zeile);
end;
CloseFile(Datei);
anzahl_edit.text:=IntToSTr(cd_listbox.items.Count);
end;
end;
Und die Sortierroutine + Listbox füllen:
Delphi-Quellcode:
procedure tausche(var l,j: tEintrag);
var h: tEintrag;
begin
h:=l;
l:=j;
j:=h;
end;
Delphi-Quellcode:
procedure TForm1.nachInterpret1Click(Sender: TObject);
var
ljahrstr, lmonatstr, ltagstr, lstdstr, lminstr, lsecstr:string;
l,j: integer;
begin
cd_listbox.items.Clear;
for l:=0 to high(daten)-1 do
for j:=l+1 to high(daten) do
begin
if daten[j].cdname.interpret < daten[l].cdname.interpret then
tausche(daten[l],daten[j]);
end;
with cd_listbox do
begin
For j:=0 to high(daten) do
begin
items.Add(daten[j].CDname.interpret+#9+daten[j].CDname.album+#9+
daten[j].genre+#9+inttostr(daten[j].jahr)+#9+floattostrf(daten[j].preis,fffixed,8,2));
end
end;