| Autor |
Beitrag |
mattl
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Di 01.08.06 11:59
Ich möchte in meinem Programm eine Listbox nach einem String durchsuchen lassen und falls dieser String gefunden das ganze Item(also ich meine die eine zeile der Listbox) in dem der String enthalten ist in einem Label anzeigen lassen auch eine weitersuchen Funktion wäre gut
Kann mir jemand eine mögliche Vorgehensweise/Funktion sagen
|
|
zongo-joe
      
Beiträge: 134
win xp prof
D3, D4, D7
|
Verfasst: Di 01.08.06 12:11
so ausm Kopf müsste das ungefähr so gehen:
for i:=1 to listbox1.items.count do
if pos(GesuchterString , listbox1.items[i-1]) > 0 then
labelAusgabe.caption:=listbox1.items[i-1];
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Di 01.08.06 12:42
Der Vorgang Funktioniert leider nicht richtig
Ich könnte mir vorstellen dass es mit dem Inhalt der Listbox zusammen hängt, in der Listbox sind mehrer hunderte einträge die dem Schema
1. XXXXX XXXXX
2. VVV VVV VVV
3. hhhh h hhhhh
.
.
.
entsprechen. Kann es sein das die Funktion nicht mit Lehrzeichen zurecht kommt?
Weiters sollte es wie schon erwähnt eine Weitersuchfunktion geben
Ich sage schon mal danke für eure Antworten
|
|
crowley
      
Beiträge: 406
Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
|
Verfasst: Di 01.08.06 16:15
also folgendes... du musst dir ja für's weitersuchen irgendwie merken, wo du gerade bist..
desweiteren ermöglicht dir SameText das ignorieren von GROSS-/kleinschreibung.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| for i := 0 to listbox1.items.count - 1 do if SameText(GesuchterString , listbox1.items[i]) > 0 then begin labelAusgabe.caption := listbox1.items[i]; listbox1.tag := i; end; for i := listbox1.tag to listbox1.items.count - 1 do if SameText(GesuchterString , listbox1.items[i]) > 0 then begin labelAusgabe.caption := listbox1.items[i]; listbox1.tag := i; end; |
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Di 01.08.06 16:48
ich bekomme immer Fehlermeldung: E2008 Inkompatible Typen
bei then begin
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Di 01.08.06 16:52
Setz mal ein .Text hinter die items[i].
Du hast ne Version <=7, oder?
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Di 01.08.06 19:53
funktioniert leider auch nicht ich habe die 2005 PE Version
wenn ich pos nehme funktioniertes...
da habe ich dann das Problem dass wenn der gesuchte String mehrmals in der Listbox vorkommt immer der letzte gefunden wird.
z.b die einträge in der Listbox sind ja wie schon erwähnt nummeriert. Wenn ich also nach 1 suche wird der Eintrag 351 gefunden (es sind 356 einträge)
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Di 01.08.06 20:09
Hallo,
Delphi-Quelltext 1:
| function SameText(const S1, S2: string): Boolean; |
also
Delphi-Quelltext 1: 2: 3:
| if SameText(GesuchterString , listbox1.items[i]) then begin |
Der Code von crowley sind zwei Funktionen, die muss man getrennt ausführen,
sonst wird halt bis zum letzten weitergesucht.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Di 01.08.06 20:21
was mach ich jetzt mit der function?
und natürlich habe ich die weitersuch funktion nicht gleichzeitig mit der normalen suche ausführen lassen es wird aber trotzdem immer der letzt mögliche eintrag gefunden
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Mi 02.08.06 07:47
Ich verwende jetzt folgenden Quelltext
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm4.SuchbtnClick(Sender: TObject); var suchw:string; i: integer; begin suchw:=edit1.Text; for i:=1 to listbox1.items.count do if pos(suchw, listbox1.items[i-1]) > 0 then label5.caption:=listbox1.items[i-1]; end; |
Die Suche bei eindeutigen suchbegriffen funktioniert
bei mehrfach vorkommenden such begriffen wird eben nur der letzte gefunden, also bringt auch weitersuchen nichts
und das mit sametext hat auch noch nicht funktioniert
|
|
Peinhard
      
Beiträge: 39
|
Verfasst: Mi 02.08.06 08:21
Wenn du nicht das letzte, sondern das erste Vorkommen haben willst, mußt du nach dem Treffer 'aussteigen':
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm4.SuchbtnClick(Sender: TObject); var suchw:string; i: integer; begin suchw:=edit1.Text; for i:=1 to listbox1.items.count do if pos(suchw, listbox1.items[i-1]) > 0 then begin label5.caption:=listbox1.items[i-1]; break; end; end; |
Wenn du weitersuchen willst, mußt du dir den ItemIndex des Treffers merken und ab da weitersuchen, also nicht wieder von vorne mit 1.
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 02.08.06 08:32
Du kannst aber auch statt break einen Dialog aufgehen lassen in dem Dem Benutzer mitgeteilt wird, dass der EIntrag gefunden wurde. Und er hat dann die Möglichkeit weiter suchen zu lassen. Da kannst du über die Buttons Ja, Nein machen und dann das Ergebnis abfragen.
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Mi 02.08.06 09:13
So suche und weitersuchen funktioniert... habe herausgefunden das zu i noch 1 addiert werden muss bevor weitergesucht wird sonst funktionierts nicht
Wenn mir jetzt noch jemand eine Lösung für das groß klein Problem sagen könnte wäre es super
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 02.08.06 09:36
Ist dir Groß- und Kleinschreibung egal? Wenn ja, kannst du den Text in der Listbox und den Suchstring für die Suche in Kleinbuchstaben umwandeln und dann vergleichen. Ich glaub das geht mit LowerCase();.
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Mi 02.08.06 09:38
Groß/-kleinschreibung wäre mir schon wichtig
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mi 02.08.06 09:44
kann man lowercase bzw. uppercase nicht einfach ins pos einbauen?
das säh dann so aus:
Delphi-Quelltext 1:
| if pos(LowerCase(suchw), LowerCase(listbox1.items[i-1])) > 0 then |
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 02.08.06 09:48
Aber Pos(); ist doch schon CaseSensitive, also unterscheidet Groß- und Kleinschreibung.
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Miri
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: Mi 02.08.06 09:53
wenn ich mattl richtig verstanden hab, ist es ihm wichtig,dass die groß- und kleinschreibung in seiner listbox erhalten bleibt, aber dass der suchstring durchaus ne unterschiedliche groß- und kleinschreibung haben können soll als das,was in der listbox steht...
z.b. wenn in der listbox AaBbCc steht, soll's da auch so drin bleiben. es soll aber auch gefunden werden,wenn man nach aAbBcC oder aabbcc oder AABBCC sucht...
ansonsten dürfte es, wie du ja sagtest kein problem geben,was noch gelöst werden müsste 
|
|
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mi 02.08.06 09:56
Miri hat folgendes geschrieben: | | wenn ich mattl richtig verstanden hab, ist es ihm wichtig,dass die groß- und kleinschreibung in seiner listbox erhalten bleibt, ... |
Ah!  Daran hab ich gar nicht gedacht. Das in der ListBox nichts verändert wird, stand für mich außer Frage. Danke!
MfG
freak
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
mattl 
      
Beiträge: 77
Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
|
Verfasst: Mi 02.08.06 10:00
ja ihr habt mich richtig verstanden die Groß&Kleinschreibung in der Listbox soll beibehalten werden... aber die Groß&Kleinschreibung im suchstring soll bei der suche nicht beachtet werden
mir ist die idee gekommen eine kopie der Listbox zu erstellen und die Lowercase ganz kleinzuschreiben und in dieser zu suchen und die gefundene position aus der original listbox anzeigen zu lassen der suchbegriff muss dann eben auch immer kleingeschrieben werden
was haltet ihr von dieser möglichkeit?
|
|