![]() |
Delphi-Version: 5
Delphi Listbox Items nach Teil String sortieren
Hey, ich bin auf der Suche nach der Lösung :D Ich habe mir in der Praxis die anscheinend zu gebrauchenden Befehle zusammengesucht, jedoch scheitere ich an der Zusammenführung selbst.
Das Problem in dessen Besitz ich bin ist, dass ich gern in der Form bzw. Oberfläche in einem Editfenster einen String eingeben möchte, soweit kein Problem(Syntax : Zahl Name Zahl Name) diesen in eine Listbox schreibe, auch noch kein Problem, und dann nach der jeweils ersten Zahl sortiere, heißt, das es die gesamte liste abarbeiten soll, jeweils nur die erste Zahl der Syntax benutzen soll, dann verschiebt, (nach oben der unten egal) um dann eine sortierte Liste zu haben ist die nach eben der ersten Zahl sortiert wurde. Jedoch den ganzen String in der Ausgabe beinhaltet. Die Zahlen sollen natürlich mir < oder > verglichen werden. for i:=1 to Listbox1.items.count -1 do begin // hier soll es schonmal die ganze Liste in Agriff nehmen for x:= 1 to length(listbox1.items[x]) do begin // hier jede einzelne Zeile bzw. item if pos(' ',Listbox1.items[x]) then begin // hier da die erste Frage, wo ist der Fehler? - Sobald ein Leerzeichen kommt soll die Schleife beginnen switch1:=copy(pos(' ',Listbox1.items[x])); // Es soll der Teilstring mit dem darunter liegenden String, welcher auch in einem Teilstring ist(die erste Zahl) verglichen werden end; end; end; - wie kann ich den Teilstring vergleichen, aber am Ende in der Ausgabe den ursprünglichen String eben nur nach der ersten Zahl sortiert bekommen? Das Sortieren soll mit einem Knopfdruck auf dem Button "sortieren" passieren die Befehle die ich einbauen wollen würde sind, pos,copy,split ps: bin neu hoffe das es in die richtige Abteilung gepostet wurde, wenn nicht bitte ich um Entschuldigung ^^ |
AW: Delphi Listbox Items nach Teil String sortieren
Ich habe an folgender Stelle aufgehört zu lesen.
Sicher, dass da [x] stehen soll und nicht [i]?
Delphi-Quellcode:
for x:= 1 to length(listbox1.items[x]) do begin // hier jede einzelne Zeile bzw. item
Zitat:
|
AW: Delphi Listbox Items nach Teil String sortieren
nja es geht mir bei [x] oder [i] darum das es symbolisiert, hatte beides probiert. beides ging nicht ^^
hobby projekt was wenn es nicht weiter geht mit der hilfe des lehrers enden muss ^^ |
AW: Delphi Listbox Items nach Teil String sortieren
Zitat:
|
AW: Delphi Listbox Items nach Teil String sortieren
Zitat:
Korrekt währe also:
Delphi-Quellcode:
Damit enthält i den index auf die Zeile.
For i := 0 to Listbox1.items.count-1 do begin
[QUOTE] for x:= 1 to length(listbox1.items[x]) do begin // hier jede einzelne Zeile bzw. item [/QUOITE] Hier soll wohl jedes einzelne ZEICHEN einer Zeile durchlaufen werden. Damit ist aber das x bei listbox1.items falsch. Hier müsste statt dessen i stehen, um die jeweilige Zeile zu referenzieren. Korrekt währ also
Delphi-Quellcode:
Damit hast in i den index auf die Zeile und in x den index des Zeichens.
for x := 1 to length(listbox1.items[i]) do begin
Beim Rest muss ich leider passen, da sich mir noch nicht ganz erschlossen hat, was den eigentlich gemacht werdeen soll. Vielleicht währe eine kleine Erklärung mit Datenbeispiel hilfreich :) |
AW: Delphi Listbox Items nach Teil String sortieren
Ganz andere Idee. Wäre da ein Listview mit mehreren Spalten nicht einfacher? Und dann eben die erste Spalte sortieren.
|
AW: Delphi Listbox Items nach Teil String sortieren
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ist die Datei, danke schonmal für die berichtigung der fehler, bin noch bluts Anfänger :D
Es soll mit dem klick auf "sortieren" die Listbox nach der jeweils ersten Zahl im string vergleichen und danach verscheiben.. Bsp 71524 Tobi 7623 Müller 892748 Max 872 Müller 89237 Lucas 8723 Müller hier wie gesagt die erste Zahl mit der jeweils anderen Zahl vergleichen um zu entscheiden was gerückt werden soll, danach aber wie gesagt den ganzen String sortiert anzeigen. Das alles solang bis die kleinste Zahl unten steht und die größte oben das weiter und zurück fügt es bzw. entfernt es aus der Listbox lg |
AW: Delphi Listbox Items nach Teil String sortieren
Zitat:
![]() |
AW: Delphi Listbox Items nach Teil String sortieren
@Zeref:
Ein Weihnachtsgeschenk für dich:
Delphi-Quellcode:
Aufruf:
PROCEDURE SortListBoxBubbleSort(List:TStrings; Dsc:Boolean);
FUNCTION Compare(const A,B:String):Integer; begin Result:=Pos(' ',A)-Pos(' ',B); if Result=0 then Result:=CompareStr(A,B); if Dsc then Result:=-Result; end; var I,First,Last:Integer; Sorted:Boolean; H:String; begin List.BeginUpdate; First:=0; Last:=List.Count-1; repeat Dec(Last); Sorted:=true; for I:=First to Last do if Compare(List[I],List[I+1])>0 then begin Sorted:=false; H:=List[I]; List[I]:=List[I+1]; List[I+1]:=H; end; until Sorted; List.EndUpdate; end; SortListBoxBubbleSort(ListBox1.Items,True); Der zweite Parameter gibt an, ob die Liste aufsteigend (False) oder absteigend sortiert wird (True). Achtung: Das funktioniert nur, wenn alle Einträge mit einer vorzeichenlosen Ganzzahl ohne führende 0 beginnen und dieser Zahl ein Blank folgt. Die Compare Funktion gibt 0 zurück wenn A = B ist, einen positiven Wert wenn A > B ist und einen negativen Wert, wenn A < B ist. Wenn die Liste nur wenig Einträge hat (200 oder so) dann sollte die obige Version OK sein. Bei mehr Einträgen hier die Quicksort-Version:
Delphi-Quellcode:
PROCEDURE SortListBoxQuickSort(List:TStrings; Dsc:Boolean);
FUNCTION Compare(const A,B:String):Integer; begin Result:=Pos(' ',A)-Pos(' ',B); if Result=0 then Result:=CompareStr(A,B); if Dsc then Result:=-Result; end; var M,H:String; PROCEDURE QSort(First,Last:Integer); var I,J:Integer; begin I:=First; J:=Last; M:=List[(First+Last) shr 1]; repeat while Compare(List[I],M)<0 do Inc(I); while Compare(List[J],M)>0 do Dec(J); if I<=J then begin H:=List[I]; List[I]:=List[J]; List[J]:=H; Inc(I); Dec(J); end; until i>j; if J>First then QSort(First,J); if I<Last then QSort(I,Last); end; begin List.BeginUpdate; QSort(0,List.Count-1); List.EndUpdate; end; |
AW: Delphi Listbox Items nach Teil String sortieren
Das ist eine häufig benötigte Funktion.
Ich habe mal einen Lösungsvorschlag mit mehreren Varianten und hoffe ich ausreichenden Kommentaren. Hiermit lassen sich die komplexesten Sortier Varianten erstellen, was ish selbst z.B. dazu verwende eine komplett im Arbeitsspeicher vorgehaltene Musikdatenbank nach den verschiedensten Kriterien zu sortieren, was bei mehreren 10000 Einträgen rasant schnell funktioniert. Es werden benötigt: Eine Form mit, 1 Listbox und 2 Buttons. Keine besondere Uses Anweisung notwendig. Also los gehts: //================================================== ================================================== ================= // Die eigentliche Sortier-Callback Funktion die an TStringlist übergeben werden kann. // Es werden die eigentliche Liste, sowie zwei Indizes der Liste an die Funktion übergeben. // Man muss nun die beiden Elemente der Liste miteinander Vergleichen, // die über die Indizes zur Verfügung gestellt werden. // // Dazu muss man also folgendes tun: // Ist das Element der Liste mit dem Index1 größer als das Element der Liste mit dem Index2, // so muss man als Rückgabeparameter dieser Funktion eine 1 einsetzen. // // Ist das Element der Liste mit dem Index1 kleiner als das Element der Liste mit dem Index2, // so muss man als Rückgabeparameter dieser Funktion eine -1 einsetzen. // // Sind beide Elemente gleich, // so muss man als Rückgabeparameter dieser Funktion eine 0 einsetzen. // // Der eigentliche Sortieralgorithmus ist dann Quicksort, der vom Objekt TStringlist // auf die hier gezeigte Weise zur Verfügung steht. // Man kann anstelle der Strings auch in gewohnter Weise auf die Objektliste zugreifen. // z.B. TIrgendetwas(List.Objects[index1]) // // Ich habe hier beim Vergleichen die ausführliche Schreibweise der If Anweisungen gewählt. // Bei einem Einfachen Vergleich ist das zwar nicht nötig, doch bei Erweiterungen bietet // die Variante mit dem "Exit" in den jeweiligen Zweigen vielfältige Möglichkeiten um // z.B. verschachtelt zu sortieren. (Wie man es z.b.von Excel kennt - Erst nach Spalte A dann nach Spalte C.... usw.) //================================================== ================================================== ================= //================================================== ================================================== ================= // Variante 1 // Die Führenden Ziffern des Strings als Integer interpretieren und danach sortieren, wie es eigentlich snnvoll ist. //================================================== ================================================== ================= Function MySortByNumbersAsValue(list:TStringlist;Index1:Int eger;Index2:Integer):Integer; Var A,B:Integer; begin Result:=0;//Defaultrückgabewert auf 0 setzen. a:=StrToInt(Copy(list[index1],1,Pos(#32,(list[index1]))-1)); b:=StrToInt(Copy(list[index2],1,Pos(#32,(list[index2]))-1)); if A>B then begin Result:=1; Exit; end; if A<B then begin Result:=-1; Exit; end; end; //================================================== ================================================== ================= // Variante 2 // Einfach die Strings sortieren wie sie sind, wie es z.b. der Explorer mit Dateinamen macht, was aber nicht immer schön ist. //================================================== ================================================== ================= Function MySortByFirstChars(list:TStringlist;Index1:Integer ;Index2:Integer):Integer; Var A,B:String; begin Result:=0; a:=list[index1]; b:=list[index2]; if A>B then begin Result:=1; Exit; end; if A<B then begin Result:=-1; Exit; end; end; //================================================== ================================================== ================= // Aufruf - Sortieren der Liste nach Nummern // Die wesentliche Zeile ist die mit "CustomSort" //================================================== ================================================== ================= procedure TForm1.Button1Click(Sender: TObject); Var l:Tstringlist; begin l:=TStringlist.Create;//Hilfsliste erzeugen Listbox1.Items.BeginUpdate;//Listbox Zeichnen einfrieren l.Assign(Listbox1.items);//Inhalt der Listbox in die Hilfsliste kopieren l.CustomSort(MySortByNumbersAsValue);//Hilfsliste sortieren, wobei die führenden ziffern in Zahlen umgewandelt wurden. Listbox1.Items.Assign(L);//Hilfsliste zurück in die Listbox kopieren l.free;//Hilfsliste wieder freigeben Listbox1.Items.EndUpdate;//Listbox Zeichnen wieder freigeben end; //================================================== ================================================== ================= // Aufruf - Sortieren der Liste nach dem kompletten String - also ganz normal aber unelegant. // Die wesentliche Zeile ist die mit "CustomSort" //================================================== ================================================== ================= procedure TForm1.Button2Click(Sender: TObject); Var l:Tstringlist; begin l:=TStringlist.Create;//Hilfsliste erzeugen Listbox1.Items.BeginUpdate;//Listbox Zeichnen einfrieren l.Assign(Listbox1.items);//Inhalt der Listbox in die Hilfsliste kopieren l.CustomSort(MySortByFirstChars);//Hilfsliste einfach nach Zeichen sortieren wie in einem Telefonbuch Listbox1.Items.Assign(L);//Hilfsliste zurück in die Listbox kopieren l.free;//Hilfsliste wieder freigeben Listbox1.Items.EndUpdate;//Listbox Zeichnen wieder freigeben end; //================================================== ================================================== ================= //Füllen der Listbox mit Zufallswerten für den Test um was zum Spielen zu haben //================================================== ================================================== ================= procedure TForm1.FormCreate(Sender: TObject); Var i,j:Byte; h:string; begin Listbox1.Items.BeginUpdate;//Listbox Zeichnen einfrieren for i:= 1 to 100 do begin h:=Inttostr(Random(1000))+' '; for j:=1 to Random(10)+5 do begin h:=h+Char(Random(25)+65); end; h:=h+' '; h:=h+Inttostr(Random(1000))+' '; for j:=1 to Random(10)+5 do begin h:=h+Char(Random(25)+65); end; Listbox1.Items.add(h); end; Listbox1.Items.EndUpdate;//Listbox Zeichnen wieder freigeben end; |
AW: Delphi Listbox Items nach Teil String sortieren
Sorry! Das mit dem Quellcode Einfügen hab ich noch nicht so richtig drauf.
Bin noch neu im Forum. |
AW: Delphi Listbox Items nach Teil String sortieren
So das Ganze noch einmal:
Code:
//=====================================================================================================================
// Die eigentliche Sortier-Callback Funktion // Hier werden die eigentliche Liste, sowie zwei Indizes der Liste zur Verfügung gestellt. // Man muss nun die beiden Elemente der Liste miteinander Vergleichen, // die über die Indizes zur Verfügung stehen. // // Ist das Element der Liste mit dem Index1 größer als das Element der Liste mit dem Index2, // so muss man als Rückgabe Parameter dieser Funktion eine 1 einsetzen. // // Ist das Element der Liste mit dem Index1 kleiner als das Element der Liste mit dem Index2, // so muss man als Rückgabe Parameter dieser Funktion eine -1 einsetzen. // // Sind beide Elemente gleich, // so muss man als Rückgabe Parameter dieser Funktion eine 0 einsetzen. // // Der eigentliche Sortieralgorithmus ist Quicksort, der vom Objekt TStringlist, // auf die hier gezeigte Weise zur Verfügung steht. // Man kann sogar in gewohnter Weise auf die Objektliste zugreifen. // z.B. TIrgendetwas(List.Objects[index1]) // // Ich habe hier beim Vergleichen die ausführliche Schreibweise der If Anweisungen gewählt. // Bei einem Einfachen Vergleich ist das zwar nicht nötig, doch bei Erweiterungen bietet // die Variante mit dem "Exit" in den jeweiligen Zweigen vielfältige Möglichkeiten um // z.B. verschachtelt zu sortieren. (Wie man es z.b.von Excel kennt - Erst nach Spalte A dann nach Spalte C.... usw.) //===================================================================================================================== // Die Führenden Ziffern des Strings als Integer interpretieren und danach sortieren, wie es eigentlich snnvoll ist. Function MySortByNumbersAsValue(list:TStringlist;Index1:Integer;Index2:Integer):Integer; Var A,B:Integer; begin Result:=0; a:=StrToInt(Copy(list[index1],1,Pos(#32,(list[index1]))-1)); b:=StrToInt(Copy(list[index2],1,Pos(#32,(list[index2]))-1)); if A>B then begin Result:=1; Exit; end; if A<B then begin Result:=-1; Exit; end; end; // Einfach die Strings sortieren wie sie sind, wie es z.b. der Explorer mit Dateinamen macht. Function MySortByFirstChars(list:TStringlist;Index1:Integer;Index2:Integer):Integer; Var A,B:String; begin Result:=0; a:=list[index1]; b:=list[index2]; if A>B then begin Result:=1; Exit; end; if A<B then begin Result:=-1; Exit; end; end; //===================================================================================================================== //Sortieren der Liste nach Nummern //===================================================================================================================== procedure TForm1.Button1Click(Sender: TObject); Var l:Tstringlist; begin l:=TStringlist.Create;//Hilfsliste erzeugen Listbox1.Items.BeginUpdate;//Listbox Zeichnen einfrieren l.Assign(Listbox1.items);//Inhalt der Listbox in die Hilfsliste kopieren l.CustomSort(MySortByNumbersAsValue);//Hilfsliste sortieren, wobei die führenden ziffern in Zahlen umgewandelt wurden. Listbox1.Items.Assign(L);//Hilfsliste zurück in die Listbox kopieren l.free;//Hilfsliste wieder freigeben Listbox1.Items.EndUpdate;//Listbox Zeichnen wieder freigeben end; //===================================================================================================================== //Füllen der Listbox mit Zufallswerten für den Test //===================================================================================================================== procedure TForm1.Button2Click(Sender: TObject); Var l:Tstringlist; begin l:=TStringlist.Create;//Hilfsliste erzeugen Listbox1.Items.BeginUpdate;//Listbox Zeichnen einfrieren l.Assign(Listbox1.items);//Inhalt der Listbox in die Hilfsliste kopieren l.CustomSort(MySortByFirstChars);//Hilfsliste einfach nach Zeichen sortieren wie in einem Telefonbuch Listbox1.Items.Assign(L);//Hilfsliste zurück in die Listbox kopieren l.free;//Hilfsliste wieder freigeben Listbox1.Items.EndUpdate;//Listbox Zeichnen wieder freigeben end; procedure TForm1.FormCreate(Sender: TObject); Var i,j:Byte; h:string; begin Listbox1.Items.BeginUpdate;//Listbox Zeichnen einfrieren for i:= 1 to 100 do begin h:=Inttostr(Random(1000))+' '; for j:=1 to Random(10)+5 do begin h:=h+Char(Random(25)+65); end; h:=h+' '; h:=h+Inttostr(Random(1000))+' '; for j:=1 to Random(10)+5 do begin h:=h+Char(Random(25)+65); end; Listbox1.Items.add(h); end; Listbox1.Items.EndUpdate;//Listbox Zeichnen wieder freigeben end; |
AW: Delphi Listbox Items nach Teil String sortieren
Moin...:P
Da gehst du in erweiteren Beitrag bearbeiten, markierst den Quelltext und drückst dem Button mit dem Helm...8-) Code ist für z.B. XML gedacht. Der Helm ist für Delphi Quelltext... |
AW: Delphi Listbox Items nach Teil String sortieren
Ein paar Erläuterungen zu meiner Arbeitsweise:
Listbox Co. verwende ich in der Regel nur zur Anzeige und dann mit OwnerDraw. Meine Daten selbst halte ich immer in Stringlisten vor, wobei ich hier maist die Objektliste verwende. Aus diese Weise lassen sich einzelne Datenelemente einfach und vor Allem schnell suchen, sortieren, und manipulieren. Ergänzungen an der Struktur, dem Verhalten und der Visualisierung sind so viel einfacher und flexibler. Einziger Nachteil ist der Aufwand beim Erstellen der Grundstruktur. Dieser Nachteil ist bereits nach kurzer Zeit ausgeglichen. |
AW: Delphi Listbox Items nach Teil String sortieren
Hi da bin ich wider. Nach dem alles super funktioniert hat bin ich wider da und knüpfe an diesem Beitrag eine Frage an und hoffe das sie gelesen wird ^^ . Dachte dass ich kein neuen Thread
aufmachen muss wenn die Frage zum Programm gehört. Falls es doch erwünscht ist mache ich es natürlich ^^ folgendes: ich möchte mit Listbox1.items.LoadFromFile(); mehrere txt datein einlesen, 71524 Tobi 7623 Müller 292748 Max 872 Müller 89237 Lucas 8723 Müller diese Datein beinhalten alle Zeilenweise die gleiche Syntax, soweit kein Problem für mich wenn ich im Quelltext bei LoadFromFile den Pfad explizit angebe. Allerding sind das datein welche zwar alles z.b Liste.txt heißen allerdings da es mehere sind würden sie bei mir entweder umbenannt werden damit sie im selben Pfad liegen können oder bekommen Liste(1).txt,Liste(2).txt... als namen. In jedem fall würde es so nicht im Quelltext drin stehen. Heißt ich brauche eine Möglichkeit wie ich flexibel die txt datein laden kann . hat jemand für mich deswegen vllt ein paar stichworte nach dem ich im Web suchen muss :D Lg Zeref |
AW: Delphi Listbox Items nach Teil String sortieren
Zitat:
Zitat:
|
AW: Delphi Listbox Items nach Teil String sortieren
wenn ich sage:"In jedem fall würde es so nicht im Quelltext drin stehen. Heißt ich brauche eine Möglichkeit wie ich flexibel die txt datein laden kann ."
ist gemeint, wie auch sonst, dass ich eine Möglichkeit brauche wie ich sie flexibel laden kann und wenn ich sage das ich sie flexibel laden möchte und hier aber steht:" soweit kein Problem für mich wenn ich im Quelltext bei LoadFromFile den Pfad explizit angebe." ist mit explizit gemeint, wie auch sonst, dass es eben nicht flexibel ist und ich nicht weiterkomme lg |
AW: Delphi Listbox Items nach Teil String sortieren
Nehmen wir an, dass die Dateien mit beliebigen Namen alle in einem Verzeichnis liegen, dann könntest Du recht einfach mit FindFirst arbeiten.
Oder wäre ein Dialog eine Alternative? Ein Dateiauswahldialog, den so konfigurieren, dass mehrere Dateien ausgewählt werden können und diese dann alle laden. (Klingt komplizierter, als es ist.) Einen Dialog nutzen, der "nur" zur Auswahl eines Verzeichnisses dient und dann im ausgewählten Verzeichnis alle Dateien lesen ... Mit LoadFromFile kann man aber nicht mehrere Dateien gleichzeitig laden, sondern immer nur eine. Aber: Items ist vom Typ TStrings und hat die Methode AddStrings. Damit kann man den Inhalt einer Stringliste zu den vorhandene Items hinzufügen. Grob ungefähr sowas (ungetestet hingedaddelt):
Delphi-Quellcode:
var
sl : TStringList; sr : TSearchRec; begin sl := TStringList.Create; Listbox1.Items.Clear; // Statt Liste*.txt irgendeinen Namensplatzhalter nach eigenen Wünschen. // Ggfls. auch noch 'nen Pfad mit angeben. If FindFirst('Liste*.txt',faAnyFile,sr) = 0 then begin Repeat sl.LoadFromFile(sr.Name); Listbox1.Items.AddStrings(sl); until FindNext(sr) <> 0; end; FindClose(sr); sl.Free; end; |
AW: Delphi Listbox Items nach Teil String sortieren
Cool also funktioniert hat es was echt super ist, lädt praktischer weise Zeilenweise xD
bloß noch die Frage es lädt nur nach der angegebenen Datei im Quellcode und nimmt so gesehen nicht die nächste lg Zeref |
AW: Delphi Listbox Items nach Teil String sortieren
Zitat:
Zitat:
|
AW: Delphi Listbox Items nach Teil String sortieren
[QUOTE=LTE5;1389990]
Zitat:
UNd meine Frage an dich,hast du nichts zum beitragen oder warum machst du einen auf Korinthenkacker ? lg |
AW: Delphi Listbox Items nach Teil String sortieren
Ich mache nicht den Korinthenkacker. Aber man muss sich auch selber ein bisschen anstrengen statt nur zu kopieren und einzufügen.
Wo bleibt sonst der Lerneffekt? |
AW: Delphi Listbox Items nach Teil String sortieren
Lerneffekt ist wenn ich es nicht kann , es möchte, nach suchen nichts finde und dann nach erfolgreichen funktionieren des Programmes eine neue Anwendung schreibe die sich nur mit dem code Block
des anderen beschäftigt um auch die Funktionsweise zu verstehen. Also mach dir da mal keine Sorgen :) selbst wenn ich es nur rein kopieren sollte kommt der lern Effekt beim nächsten Programm. Wie auch schon bei der ersten Hilfe mit Quick und Bubblesort. |
AW: Delphi Listbox Items nach Teil String sortieren
Hier
Delphi-Quellcode:
steht im ersten Parameter von FindFirst ein Platzhalter für den Dateinamen.
FindFirst('Liste*.txt',faAnyFile,sr)
Es werden also in dem Beispiel alle Dateien geladen, deren name dem Muster [i]Listeirgendwas.txt[(i] entsprechen. Wenn es da nur eine Datei gibt, wird auch nur die geladen. Hier sollten also alle Dateien mit den Namen Liste1.txt, Liste2.txt ... geladen werden. Man könnte auch
Delphi-Quellcode:
angeben, aber dann werden nicht nur Textdateien, sondern auch Exen, DLLs ... geladen, das wäre vermutlich eher suboptimal ;-)
FindFirst('*.*',faAnyFile,sr)
Deine Namensvorstellungen von weiter oben (Liste(1).txt,Liste(2).txt ...) müssten mit der Routine eigentlich umsetzbar sein. Die Routine fügt mit AddStrings die zuletzt gelesene Datei immer "hinten an". Der Inhalt von Items ist also nicht irgendwie sortiert. Aber dem können wir abhelfen (wieder nur hingedadddelt und ungetestet):
Delphi-Quellcode:
Wenn Du Besonderheiten bei der Sortierung haben möchtest, so schau Dir mal die Möglichkeiten von TStringList an. Da gibt es auch die Option, eine eigene Sortierroutine zu nutzen. Dazu dient die Methode CustomSort, Infos dazu findest Du z. B. hier:
var
sl : TStringList; slAlles : TStringList; sr : TSearchRec; begin sl := TStringList.Create; slAlles := TStringList.Create; Listbox1.Items.Clear; // Statt Liste*.txt irgendeinen Namensplatzhalter nach eigenen Wünschen. // Ggfls. auch noch 'nen Pfad mit angeben. If FindFirst('Liste*.txt',faAnyFile,sr) = 0 then begin Repeat sl.LoadFromFile(sr.Name); slAlles.AddStrings(sl); until FindNext(sr) <> 0; end; FindClose(sr); slAlles.Sort; Listbox1.Items.AddStrings(slAlles); slAlles.Free; sl.Free; end; ![]() |
AW: Delphi Listbox Items nach Teil String sortieren
Danke! Ich hatte mir auf deinem Kommentar hin noch mal fix Open Dialog angeguckt und muss sagen das es wirklich um welten einfach zu handeln ist ^^
ich werde mich dafür entscheiden.ich hatte zu test auch die andere variante benutzt. echt cool :D |
AW: Delphi Listbox Items nach Teil String sortieren
Ich glaube, nun reden alle aneinander vorbei, bzw. werden jetzt zwei Probleme vermischt.
Der Fragende sieht nun den Wals vor lauter Bäumen nicht mehr und ohne zu erklären, was man da postet, wird er nur verwirrt. Ich versuche mal auseinanderzubröseln was ich bisher herauslese: 1. Das Sortieren von Strings nach "Spalten" in Listbox. (Wurde gelöst) 2. Das Einlesen von eben der zu sortierenden Listen in die Listbox. (Wurde alerdings nur an TStringlist beschrieben) 3. Unser Kollege möchte aber gerne mehrere Dateien nacheinander einlesen und in der Listbox aneinander hängen. (Merge) 4. Vermutlich werden diese Dateien in einem gemeinsamen Verzeichnis liegen. (Beschrieben wurde aber nur wie man automatisiert, eine Liste von Dateien in eine Stringlist bekommt, nicht daber deren Inhalt). Es geht vermutlich um die Kombination dieser Dinge: 1. Man übergibt ein Verzeichnis. 2. Die Textdateien in diesem Verzeichnis werden ermittelt und nacheinander eingelesen und deren Inhalt den Items der Listbox angehängt. 3. Der Inhalt der Listbox wird sortiert. Ich schätze das ist der Ansatz. |
AW: Delphi Listbox Items nach Teil String sortieren
jojo wie gesagt der hinweis mit openDialog hat geholfen und das Problem gelöst :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz