Autor Beitrag
mattl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
  { deine suchfunktion }
  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;
  { deine weitersuchen- funktion }
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: Di 01.08.06 16:48 
ich bekomme immer Fehlermeldung: E2008 Inkompatible Typen
bei then begin
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 01.08.06 20:09 
Hallo,

ausblenden Delphi-Quelltext
1:
function SameText(const S1, S2: string): Boolean;					

also
ausblenden Delphi-Quelltext
1:
2:
3:
if SameText(GesuchterString , listbox1.items[i]) then 
  begin 
  //...


Der Code von user profile iconcrowley 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: Mi 02.08.06 07:47 
Ich verwende jetzt folgenden Quelltext


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 39



BeitragVerfasst: Mi 02.08.06 08:21 
Wenn du nicht das letzte, sondern das erste Vorkommen haben willst, mußt du nach dem Treffer 'aussteigen':

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: Mi 02.08.06 09:38 
Groß/-kleinschreibung wäre mir schon wichtig
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 02.08.06 09:44 
kann man lowercase bzw. uppercase nicht einfach ins pos einbauen?

das säh dann so aus:

ausblenden Delphi-Quelltext
1:
if pos(LowerCase(suchw), LowerCase(listbox1.items[i-1])) > 0 then					
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Mi 02.08.06 09:56 
user profile iconMiri hat folgendes geschrieben:
wenn ich mattl richtig verstanden hab, ist es ihm wichtig,dass die groß- und kleinschreibung in seiner listbox erhalten bleibt, ...


Ah! :idea: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77

Win Xp Pro
Deplphi 3 Pro,Delphi 2005 PE
BeitragVerfasst: 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?