Autor Beitrag
absentsilence
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 13.02.04 17:05 
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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
{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:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure tausche(var l,j: tEintrag); 
var h: tEintrag; 
begin 
h:=l; 
l:=j; 
j:=h; 
end
 


Source: 

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;
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Fr 13.02.04 18:55 
hallo,
beim öffnen der datei schreibst du deine "daten" nur in die listbox. beim sortieren nach alphabet löschst du die listbox. beim anschließend sortieren benutz du die daten aus dem array und nciht aus der listbox. beim öffnen der datei solltest du also den array mit den geöffneten datei füllen.
Hoffe dass ich dein programm verstanden habe und geholfen habe!

rokdd
absentsilence Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 13.02.04 20:40 
Hmm, klingt gut aber wie fülle ich das Array beim Öffnen der Datei? Für ein Stückchen Quellcode wäre ich dankbar. :?: :) :?:
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Fr 13.02.04 20:47 
okay ich habe es also voll geschnallt was du meinst. das gleiche problem wie du hatte ich auch schon einmal(array speichern). du kannst denn array nicht einfach speichern sondern variable für variable, element für element ein und auslesen. ich habe das mittels eines tfilestreans gemacht und ihn auch schon mal hier im DF gepostet. wenn du ihn nicht findest melde dich bitte nochmal!


rokdd
absentsilence Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 13.02.04 21:03 
puuh,... klingt etwas kompliziert. Wenn du den Code dafür noch hast, poste ihn bitte mal hier, ich find nämlich nichts gutes. Oder wenn du etwas Zeit hast, ICQ#104124934 :)
Danke für deine Hilfe! :)
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Fr 13.02.04 21:06 
ja habe ein bisschen zeit aber ich besitze keine ICQ.

Rokdd

PS:Schau mal nach dem quelltext nach...
absentsilence Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 17.02.04 14:30 
Also ist das Problem, wie man ein dynamisches array speichert - und genau den quelltext hab ich nicht gefunden. Weiß einer, wie das geht...? :?:
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Di 17.02.04 14:39 
ja habe ich schon mal im forum gepostet: Link

Hoffe das hilft, bei fragen kannst du dich gerne an mich wenden(via PN oder Forum)

Rokdd
absentsilence Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 17.02.04 16:00 
Puh.... also ich glaub ich weiß, wie du es meinst, aber wie baue ich das in einen speichern bzw. öffnen-dialog ein, wo ich den Dateinamen festlege etc.?
rokdd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 329

Win XP
D6
BeitragVerfasst: Di 17.02.04 16:09 
also ich erkläre dir mal wie das so ungefähr funzt, aber du kannst mal bei google suchen.

der array wird beim öffnen auf die richtige länge gesetzt. diese variable wird aus der datei ausgelesen.
dann kommt ide schleife die die einzelen elemente mit den daten füttert(hast du auch ein recordtyp???).
wichtig ist hier die strings müssen pchar gelesen werden. dazu musst du die länge wissen. die hast du vor dem elmenent rausgelesen:
ausblenden Quelltext
1:
2:
4
XXXX

Die 4 gibt also die länge an, und die nächste zeile ist dann der string selber. ansosnten musst beim lesen und schreiben mit der datei immer noch den buffer mit angeben. ansonsten ist wichtig dass alles in genau der gleichen reihenfolge gelesen und geschreiben wird.

Rokdd[/code]