Autor |
Beitrag |
absentsilence
Hält's aus hier
Beiträge: 5
|
Verfasst: 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:
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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| 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:
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
      
Beiträge: 329
Win XP
D6
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: Fr 13.02.04 20:40
|
|
rokdd
      
Beiträge: 329
Win XP
D6
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 329
Win XP
D6
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 329
Win XP
D6
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 329
Win XP
D6
|
Verfasst: 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: Quelltext
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]
|
|