Autor |
Beitrag |
lonley-lovley
Hält's aus hier
Beiträge: 8
|
Verfasst: So 11.12.05 17:34
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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 11.12.05 18:20
Nach einem Teilstring sucht man mit POS();.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
lonley-lovley 
Hält's aus hier
Beiträge: 8
|
Verfasst: So 11.12.05 18:27
GTA-Place hat folgendes geschrieben: | Nach einem Teilstring sucht man mit POS();. |
hab ich doch getan!
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 11.12.05 18:30
Hallo und  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).
_________________ We are, we were and will not be.
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 11.12.05 18:33
Stimmt, hab ich übersehen. Sry.
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
lonley-lovley 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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.
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; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
lonley-lovley 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
lonley-lovley 
Hält's aus hier
Beiträge: 8
|
Verfasst: So 11.12.05 23:52
|
|