Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Neue Daten werden sortiert, geöffnete Datei nicht
absentsilence - Fr 13.02.04 17:05
Titel: Neue Daten werden sortiert, geöffnete Datei nicht
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:
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 - 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 - 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 - 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 - 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 - 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 - 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...? :?:
absentsilence - 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 - 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:
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]
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!