Autor Beitrag
lonley-lovley
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 11.12.05 17:34 
ausblenden 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 user profile iconGausi: Delphi-Tags hinzugefügt.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 11.12.05 18:20 
Nach einem Teilstring sucht man mit Suche in der Entwickler-Ecke POS();.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
lonley-lovley Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 11.12.05 18:27 
user profile iconGTA-Place hat folgendes geschrieben:
Nach einem Teilstring sucht man mit Suche in der Entwickler-Ecke POS();.


hab ich doch getan!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 11.12.05 21:00 
ausblenden 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); /// Teilstring bleibt übrig
            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 user profile iconGausi: Delphi-Tags hinzugefügt.
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: 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.
ausblenden volle Höhe 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); /// Teilstring bleibt übrig

   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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: 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
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: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  z := pos('. ', alles);
  //Delete(alles, 1, z+1); //brauchst Du nicht mehr
  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 Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 11.12.05 23:52 
user profile iconLannes 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
  z := pos('. ', alles);
  //Delete(alles, 1, z+1); //brauchst Du nicht mehr
  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;)