Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Items einer TreeView nach einem String durchsuchen..
Terra23 - Sa 21.07.07 22:51
Titel: Items einer TreeView nach einem String durchsuchen..
Hi!
Ich habe folgende Prozedur im Programm:
Delphi-Quelltext
1: 2: 3: 4:
| S:=Edit1.Text; For A:=0 To TreeView1.Items.Count-1 Do If TreeView1.Items[A].Text=S Then ListBox1.Items.Add(TreeView.Items[A]); |
Mit dieser Prozedur kann ich prüfen, ob das Item innerhalb eines Treeviews
exakt mit dem Suchstring S übereinstimmt.
Nun möchte ich allerdings herausfinden, ob der Suchstring S auch irgendwo in dem Item des TreeViews steht, also z.B.
Suchstring S = Forum
TreeView Item = Delphi-Forum.de
Nun soll er mir dieses Item auch in die ListBox machen, da der Suchbegriff S ja in dem Item vorkommt.
Ich hoffe, ihr versteht mein Problem einigermaßen.
MfG
Terra
Bernhard Geyer - Sa 21.07.07 23:11
Schau dir mal die Pos-Funktion an, evtl. zusätzlich noch die (Ansi-)Upper/Lowercase-Funktion.
Terra23 - Do 09.08.07 17:25
Hi!
Das habe ich getan. Ich habe auch schon einige Versuche mit Copy und so versucht aber ich komme nicht weiter. Dazu reichen meine Kenntnisse in Delphi einfach nicht aus. ;)
Kann mir jemand vielleicht beim Code helfen?
Meine Idee war folgende:
1) Ich gehe mit einer Schleife die Items durch.
2) Ich nehme das jeweilige Item, beginne an erster Stelle.
3) Ich kopiere den Text von der ersten Stelle an in der Länge wie mein Suchstring lang ist.
4) Stimmt der String, gehe ich zum nächsten Item. Stimmt er nicht, beginne ich mit Schritt 2 aber diesmal an zweiter Stelle.
Ich stehe echt auf dem Schlauch..
Calculon - Do 09.08.07 18:33
Ich hätte da ein Workaround anzubieten:
Mit
StringReplace [
http://www.delphibasics.co.uk/RTL.asp?Name=StringReplace] änderst du den aktuellen
string der
TreeView um irgendeinen Zusatzstring, wenn der
string aus
s vorkommt und vergleichst anschließend, ob dein urpsrünglicher String der selbe wie der neue ist.
Hier veranschaulicht mit Hilfe einer Listbox:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for i := 0 to Listbox.Items.Count - 1 do begin before := Listbox.Items.Strings[i]; after := StringReplace(before, s, '_', [rfIgnoreCase]); if before <> after then ShowMessage('In Zeile ' + inttostr(i+1) + ' kommt ' + s + ' vor.'); end; |
Ungetestet...
[edit]Kommst du wirklich aus Busenberg?[/edit]
Gruß
Calculon
--
Gausi - Do 09.08.07 18:48
Stringreplace? Sorry, aber :autsch:. Der richtige Hinweis mit der pos-Funktion kam doch schon...:roll:
Delphi-Quelltext
1: 2: 3: 4:
| if pos(einKurzerString, einLangerString) > 0 then Showmessage(einkurzerString + ' ist in ' + einLangerString + ' enthalten.') else Showmessage(einkurzerString + ' ist nicht in ' + einLangerString + ' enthalten.'); |
Wenn ich wissen will, ob in meinem Bierglas noch Bier drin ist, mach ich ja auch kein Foto davon, dreh es um, mach wieder ein Foto und gucke, ob die Bilder gleich aussehen und/oder der Boden nass ist, sondern guck einfach nach, ob noch Bier drin ist...
Calculon - Do 09.08.07 18:53
Ja schon, aber der Aufwand wird größer, wenn er das ganze nicht Case-Sensitive haben will.
Gausi - Do 09.08.07 18:58
Calculon hat folgendes geschrieben: |
Ja schon, aber der Aufwand wird größer, wenn er das ganze nicht Case-Sensitive haben will. |
Dann pack ich ein AnsiUpperCase um beide Strings rum (der Tip kam auch schon).
Wenn ich wissen will, ob Bier oder Kölsch in meinem Glas ist, drehe ich es auch nicht um...
Terra23 - Do 09.08.07 19:25
@Gausi: Danke, das funktioniert so. Nun frage ich mich aber: Warum hab ich Idiot das nicht hinbekommen?
Und: Nun will ich ein Bier.
Danke für die Hilfe.
Terra
PS: Du stehst nun auf etcg.de in meiner Sig mit dem Spruch. ;)
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!