Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Vergleich von Edit und Listbox (https://www.delphipraxis.net/197131-vergleich-von-edit-und-listbox.html)

Rawsche 18. Jul 2018 19:40

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...

DieDolly 18. Jul 2018 20:22

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;

Rawsche 18. Jul 2018 21:06

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?

DieDolly 18. Jul 2018 21:11

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.

p80286 18. Jul 2018 22:17

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

Rawsche 19. Jul 2018 09:51

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.

p80286 19. Jul 2018 12:28

AW: Vergleich von Edit und Listbox
 
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;
    Memo1.Lines.Add('Schlagwort "' + Suchwort + '" befindet sich in der Zeile (i + 1) mit dem Namen "' + ListBox1.Items[i] + '"');

    end;
  end;
end;
@DieDolly
Wollte mich nicht mit Deinen Federn schmücken, aber so scheint es mir am einfachsten.

Gruß
K-H

DieDolly 19. Jul 2018 12:30

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] + '"');

p80286 19. Jul 2018 12:33

AW: Vergleich von Edit und Listbox
 
:oops:
schlunzig

Gruß
K-H

Rawsche 19. Jul 2018 15:37

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.

KodeZwerg 19. Jul 2018 16:38

AW: Vergleich von Edit und Listbox
 
Vieleicht Suchbegriffe und Datenbestand per "LowerCase() oder UpperCase()" umwandeln damit Gross-/Kleinschreibung im Suchfeld egal ist.

DieDolly 19. Jul 2018 16:43

AW: Vergleich von Edit und Listbox
 
Vielleicht sogar noch eine Fuzzy Search?
http://www.gausi.de/approxstrutils-en.html

KodeZwerg 19. Jul 2018 16:50

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.

DieDolly 19. Jul 2018 16:54

AW: Vergleich von Edit und Listbox
 
Zitat:

Ich meinte es mit dem TE lediglich gut um halt Gross-/Kleinschreibung zu egalisieren
Habe nix dagegen gesagt keine Sorge :P
Ist es nicht sogar Standard bei solchen Suchenfunktionen alles zu egalisieren?

KodeZwerg 19. Jul 2018 17:22

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.

KodeZwerg 19. Jul 2018 18:25

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:

Zitat von p80286 (Beitrag 1407887)
Zitat:

Zitat von DieDolly (Beitrag 1407888)
Delphi-Quellcode:
var
 Suchwort: String;
 Gefunden: Boolean;
begin
 Gefunden := False;
 Suchwort := LowerCase(Edit1.Text); // <- hier intern kleine Buchstaben erzeugen

 for i := 0 to ListBox1.Items.Count -1 do
  begin
   Gefunden := Pos(Suchwort, LowerCase(ListBox1.Items[i])) > 1); // <- hier intern nach kleinen Buchstaben suchen

   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 ' + IntToStr(i + 1) + ' mit dem Namen "' + ListBox1.Items[i] + '"');

    end;
  end;
end;


Erklärung: Nun wird intern der Suchbegriff in Kleinbuchstaben verwandelt, bei der ListBox-Abfrage genauso vorgehen, nun ist Grossschreibung egal.

DieDolly 19. Jul 2018 18:29

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.

KodeZwerg 19. Jul 2018 18:33

AW: Vergleich von Edit und Listbox
 
Zitat:

Delphi-Version: 5
Es sollte genau so wie ich schrieb funktionieren.

DieDolly 19. Jul 2018 18:40

AW: Vergleich von Edit und Listbox
 
Zitat:

Zitat von Rawsche (Beitrag 1407775)
Edit: Ich verwende glaube ich Lazarus IDE v1.8.4 . Weiß leider nicht, was das genau bedeutet und ob es euch hilft...

Er/Sie verwendet Lazurus.

Rawsche 19. Jul 2018 19:16

AW: Vergleich von Edit und Listbox
 
Ich hab Uppercase schon eingebaut gehabt. Das hat gut geklappt...

p80286 19. Jul 2018 21:36

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 08:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz