![]() |
Delphi-Version: 5
Vergleich von Edit und Listbox
Hi zusammen,
Ich bin Programmier-Einsteiger und hänge gerade an einem Problem. Ich entwickle derzeit ein kleines Programm, welches auch eine Suchfunktion enthalten soll. In einer Listbox werden pro Zeile Wörter aufgelistet, die irgendwie zusammengehören (z.B. "Zoo Tiere Eintrittskarten"). In der nächsten Zeile geht es dann um ein anderes Thema. (Ich hoffe, dass ihr versteht was ich meine.) Diese Zeilen werden dann Namen von .txt dateien werden (z.B. "Zoo Tiere Eintrittskarten.txt"). Nun möchte ich durch die Eingabe in ein Edit Schlagworte herraussuchen. Wenn ich mich also nicht mehr genau erinnere, wie eine Datei hieß, dann kann ich einfach nach einem Wort suchen (alos z.B. "Tiere") und die Zeile wird mir z.B. in einem Label angezeigt (z.B. "Schlagwort 'Tiere' befindet sich in der Zeile X mit dem Namen 'Zoo Tiere Eintrittskarten'. "). Im Grunde soll die Suchfunktion also genau so funktionieren, wie die Suche im Windows-Explorer. Gibt es dafür eine einfache Standartfunktion? Ich habe bereits versuch selber eine zuschreiben, in dem ich den Inhalt des Edits (also das Schlagwort) in Zeichen zerlegt habe. Diese wollte ich dann nachher mit den Zeichen in der Listbox vergleichen. Allerdings habe ich Probleme beim speichern der einzelnen Buchstaben gehabt. Ich habe es mit dynamsichen Arrays versucht (mir bisher unbekannt). Außerdem hat der Vergleich von Array und Listbox nicht hingehauen und nun bin ich völlig verwirrt. :( Gibt es für mein Problem vielleicht eine einfach Funktion, die genau diese Suche über Zeichen übernimmt und mir dann die Zeilen ausgeben kann, in der sich die gefunden Wörter befinden? Habt ihr vielleicht alternative Ideen. Ich hoffe, dass ich mich verständlich ausdrücken konnte und dass ich euch nicht nerve, weil es zu banal ist oder so... Liebe Grüße und schonmal Dankeschön Rawsche Edit: Ich verwende glaube ich Lazarus IDE v1.8.4 . Weiß leider nicht, was das genau bedeutet und ob es euch hilft... |
AW: Vergleich von Edit und Listbox
Ungetestet und nur aus dem Kopf. Aber so in etwa müsste es funktionieren. Natürlich muss alles an die eigenen Bedürfnisse angepasst werden.
Das hier soll nur zeigen wie es funktionieren kann.
Delphi-Quellcode:
var
Suchwort: String; Gefunden: Boolean; begin Gefunden := False; Suchwort := Edit1.Text; for i := 0 to ListBox1.Items.Count -1 do begin Gefunden := Pos(Suchwort, ListBox1.Items[i]) > 1); if Gefunden then begin Label1.Caption := 'Schlagwort "' + Suchwort + '" befindet sich in der Zeile (i + 1) mit dem Namen "' + ListBox1.Items[i] + '"'; Break; end; end; end; |
AW: Vergleich von Edit und Listbox
Danke erstmal.
Ich werde mich morgen mit der Funktion auseinandersetzten. Gibt es eine Möglichkeit sie auch dafür kompatibel zumachen, dass ein Wort mehrmals vorkommt? |
AW: Vergleich von Edit und Listbox
Wie genau meinst du das?
Pos() gibt die erste Position zurück, an der das Suchwort in der Zeichenkette gefunden wurde. |
AW: Vergleich von Edit und Listbox
Du schenkst Dir das Break und gibst die gefudene Zeile in einem Memo aus.
(wäre eine Möglichkeit) Gruß K-H |
AW: Vergleich von Edit und Listbox
Ich meine, dass es sein kann, dass Wörter mehrmals vorkommen. Die Prozedur sollte also alle Zeilen heraussuchen, in denen das Wort vorkommt und nicht nur die erste.
|
AW: Vergleich von Edit und Listbox
Delphi-Quellcode:
@DieDolly
var
Suchwort: String; Gefunden: Boolean; begin Gefunden := False; Suchwort := Edit1.Text; for i := 0 to ListBox1.Items.Count -1 do begin Gefunden := Pos(Suchwort, ListBox1.Items[i]) > 1); if Gefunden then begin //Label1.Caption := 'Schlagwort "' + Suchwort + '" befindet sich in der Zeile (i + 1) mit dem Namen "' + ListBox1.Items[i] + '"'; //Break; Memo1.Lines.Add('Schlagwort "' + Suchwort + '" befindet sich in der Zeile (i + 1) mit dem Namen "' + ListBox1.Items[i] + '"'); end; end; end; Wollte mich nicht mit Deinen Federn schmücken, aber so scheint es mir am einfachsten. Gruß K-H |
AW: Vergleich von Edit und Listbox
Kein Problem. Aber du hast auch gleich einen meiner Fehler übernommen.
Korrekt
Delphi-Quellcode:
Memo1.Lines.Add('Schlagwort "' + Suchwort + '" befindet sich in der Zeile ' + IntToStr(i + 1) + ' mit dem Namen "' + ListBox1.Items[i] + '"');
|
AW: Vergleich von Edit und Listbox
:oops:
schlunzig Gruß K-H |
AW: Vergleich von Edit und Listbox
Vielen Dank für eure Hilfe. Ich habe noch einige kleine Sachen eingefügt und jetzt funktioniert alles genau so, wie ich mir das vorgestellt habe.
|
AW: Vergleich von Edit und Listbox
Vieleicht Suchbegriffe und Datenbestand per "LowerCase() oder UpperCase()" umwandeln damit Gross-/Kleinschreibung im Suchfeld egal ist.
|
AW: Vergleich von Edit und Listbox
|
AW: Vergleich von Edit und Listbox
Ich meinte es mit dem TE lediglich gut um halt Gross-/Kleinschreibung zu egalisieren. Eure Beispiele sind ja explizit.
|
AW: Vergleich von Edit und Listbox
Zitat:
Ist es nicht sogar Standard bei solchen Suchenfunktionen alles zu egalisieren? |
AW: Vergleich von Edit und Listbox
In diesem Beispiel hier würde ich es auf jeden Fall so machen. Ein Suchfeld für ein Text-Editor da würde ich Optionen an das Suchfeld pappen. Je nach App-Typ und mit was verglichen werden soll. Ich als Anwender würde ungern gezwungen sein alles exakt so zu Schreiben wie es in der ListBox vorkommt weswegen ich die Egalisierung Vorschlug.
|
AW: Vergleich von Edit und Listbox
Falls es für den TE unverständlich ist wie ich es meine, ich war so frei das vorhandene zu editieren:
Zitat:
|
AW: Vergleich von Edit und Listbox
Ich weiß nicht ob LowerCase intern zu AnsiLowerCase weiterleitet aber irgendwo habe ich mal gelesen, dass LowerCase veraltet sei.
|
AW: Vergleich von Edit und Listbox
Zitat:
|
AW: Vergleich von Edit und Listbox
Zitat:
|
AW: Vergleich von Edit und Listbox
Ich hab Uppercase schon eingebaut gehabt. Das hat gut geklappt...
|
AW: Vergleich von Edit und Listbox
Dann erstell doch gleich einen Index, der ist auf jeden Fall schneller.
Gru´ß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz