Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - in listbox teilstring suchen...
lonley-lovley - So 11.12.05 17:34
Titel: in listbox teilstring suchen...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TOszVerwalt.btsuchenClick(Sender: TObject); var alles:string; z,i : integer; begin i:=0 ; repeat alles:=libanzeige.items[i]; z:=pos('. ',alles) ; delete(alles,1,z+2); if libanzeige.items[i] <> edbildgang.text then libanzeige.items.Delete(i); i:=i+1; until i= libanzeige.Items.Count ; |
ist mein bisheriger quellcode aber der löscht einfach jeden 2. string und ich weiß nciht woran das liegt
es sollen doch nur die geschöscht werden bei denen der teilstring nciht dem eingabewert entspricht
Moderiert von
Gausi: Delphi-Tags hinzugefügt.
GTA-Place - So 11.12.05 18:20
Nach einem Teilstring sucht man mit
POS();.
lonley-lovley - So 11.12.05 18:27
GTA-Place hat folgendes geschrieben: |
Nach einem Teilstring sucht man mit POS();. |
hab ich doch getan!
Gausi - So 11.12.05 18:30
Hallo und :welcome: in der Entwickler-Ecke!
Ich weiss auch nicht genau, woran das liegt, aber du machst einen prinzipiellen Fehler:
Wenn du eine Liste durchgehen willst, und dabei einige Elemente löschen willst, so ist es empfehlenswert, die Liste von
hinten durchzugehen! Warum? Guckst du hier:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| z.B. i=2 0 Null 1 Eins 2 Zwei <---- (löschen, anschließend i erhöhen) 3 Drei 4 Vier
Ergebnis: 0 Null 1 Eins 2 Drei (Dieser Wert wird einfach übersprungen) 3 Vier <------ |
Wahrscheinlich stimmt mit deiner Überprüfung noch was nicht, so dass diese immer True liefert, sodass dann jede zweite Zeile gelöscht wird (warum jede Zweite, sollte jetzt klar sein).
GTA-Place - So 11.12.05 18:33
Stimmt, hab ich übersehen. Sry.
lonley-lovley - So 11.12.05 21:00
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TOszVerwalt.btsuchenClick(Sender: TObject); var alles: string; z, i: integer; begin for i := libanzeige.Items.Count-1 DownTo 0 do begin alles := libanzeige.items[i]; z := pos('. ', alles); Delete(alles, 1, z+1); if edbildgang.text = 'og' then if alles <> '1' then libanzeige.items.Delete(i); if edbildgang.text ='bos' then if alles <> '2' then libanzeige.items.Delete(i); if edbildgang.text = 'of' then if alles <> '4' then libanzeige.items.Delete(i); if edbildgang.text ='obf' then if alles <> '5' then libanzeige.items.Delete(i); if edbildgang.text ='ob' then if alles <> '6' then libanzeige.items.Delete(i); end; end; |
hab jetzt nochma l was neues probiert jetzt werden alle einträge gelöscht weiß jetzt jemand woran das liegt?
sry ür die länge aber kürzer funzt es ja anscheinend auch nicht!
Moderiert von
Gausi: Delphi-Tags hinzugefügt.
Lannes - So 11.12.05 23:01
Hallo,
hab den Code mal formatiert, war ja grausam :?
Wie sehen denn die Einträge in der ListBox aus?
Könnte es sein das der Reststring nie eine '1' '2' u.s.w. ist?
Eventuell fällt Dir jetzt selbst etwas auf.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TOszVerwalt.btsuchenClick(Sender: TObject); var alles: string; z, i: integer; begin for i := libanzeige.Items.Count-1 DownTo 0 do begin alles := libanzeige.items[i]; z := pos('. ', alles); Delete(alles, 1, z+1); if edbildgang.text = 'og' then if alles <> '1' then libanzeige.items.Delete(i);
if edbildgang.text ='bos' then if alles <> '2' then libanzeige.items.Delete(i);
if edbildgang.text = 'of' then if alles <> '4' then libanzeige.items.Delete(i);
if edbildgang.text ='obf' then if alles <> '5' then libanzeige.items.Delete(i);
if edbildgang.text ='ob' then if alles <> '6' then libanzeige.items.Delete(i);
end; end; |
lonley-lovley - So 11.12.05 23:11
Titel: doch
also ich habs gerade getestet und hab mir den rest string ausgeben lassen der ist 1 gewesen :( ich weiß echt nicht mehr weiter
lonley-lovley - So 11.12.05 23:13
Titel: einträge
ach ja meine einträge sehen so aus
nachname,vorname;kl. nummer/ tutor
umgesetzt also
Mustermann, Max;kl. 123 /Müller
und die erste zahl gibt den bildungsgang an in diesem fall OG max mustermann macht also abitur;)
Lannes - So 11.12.05 23:49
Hallo,
mit
Delete(alles, 1, z+1); löscht Du nur den Teil bis zur ersten Zahl.
Aus 'Mustermann, Max;kl. 123 /Müller' wird '123 /Müller'.
Also ist
alles immer ungleich '1' und alle Items werden gelöscht.
Wenn Du nur auf die erste Zahl nach '. ' prüfen willst,
kannst Du direkt auf sie zugreifen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| z := pos('. ', alles); if edbildgang.text = 'og' then if alles[z+2] <> '1' then libanzeige.items.Delete(i); |
lonley-lovley - So 11.12.05 23:52
Lannes hat folgendes geschrieben: |
Hallo,
mit Delete(alles, 1, z+1); löscht Du nur den Teil bis zur ersten Zahl.
Aus 'Mustermann, Max;kl. 123 /Müller' wird '123 /Müller'.
Also ist alles immer ungleich '1' und alle Items werden gelöscht.
Wenn Du nur auf die erste Zahl nach '. ' prüfen willst,
kannst Du direkt auf sie zugreifen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| z := pos('. ', alles); if edbildgang.text = 'og' then if alles[z+2] <> '1' then libanzeige.items.Delete(i); | |
danke das funktioniert jetzt auch hab nen neues problem wo du mir helfen kannst;)
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!