Autor Beitrag
$ebbi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Fr 18.05.12 22:01 
Hey,

ich würde gerne alle Einträge aus der Listbox entfernen, die auf den Buchstaben 'p' enden.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
for x := 0 to Listbox1.items.Count - 1 do
  begin
    string:=listbox1.Items.Strings[x];
    if string[length(string)] = 'p' then listbox1.Items.Delete[x];
  end;

dummerweise bekomme ich hier die Felehrmeldung "Nicht genügend wirkliche Parameter". Woran liegt das? es scheint alles zu klappen wenn ich mir x anzeigen lasse erkennt er alles wunderbar. Ich denk die antwort ist bestimmt total einfach aber ich seh den Fehler einfach nicht ;)

mfg Sebbi

Edit: Ich idiot hab das x in [] gesetzt () habs aber einfach nicht gesehen. Sry für den thread :(


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 18.05.2012 um 22:15
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 18.05.12 22:17 
Moin!

user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
for x := 0 to Listbox1.items.Count - 1 do
  begin
    string:=listbox1.Items.Strings[x];
Ich hoffe, du hast die Variable nicht wirklich "string" genannt, oder? Das ist keine gute Idee, da String ein reserviertes Wort und auch ein Funktionsname ist, also sehr viel Raum für Seiteneffekte lässt. :? Nenn die Variable doch z.B. "tmpString" oder so. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 18.05.12 22:40 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Ich hoffe, du hast die Variable nicht wirklich "string" genannt, oder? Das ist keine gute Idee, da String ein reserviertes Wort und auch ein Funktionsname ist, also sehr viel Raum für Seiteneffekte lässt.


Diese Seiteneffekte sind ausgeschlossen. Ein reserviertes Wort kann man nicht als Variable deklarieren. Der Compiler verweigert die Übersetzung.
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1448

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Sa 19.05.12 08:26 
Hallo $ebbi,
außer dem schon Genannten (Variable darf nicht string heißen), funktioniert auch die Zählschleife nicht, da zu Beginn der Schleife der Endwert ermittelt wird. Löschst Du einen Eintrag, so ändert sich die Zahl der Einträge, jedoch nicht der Endwert der Schleife. Besser ist eine endprüfende Schleife, z.B.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  x := 0;
  repeat
    k:=listbox1.Items.Strings[x];
    if k[length(k)] = 'p' then listbox1.Items.Delete(x)
                          else inc(x);
  until x>Listbox1.items.Count - 1;

x wird nur dann erhöht, wenn der String nicht gelöscht wurde. Andernfalls überspringst Du Einträge.
Beste Grüße
Mathematiker
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Sa 19.05.12 13:12 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
for x := 0 to Listbox1.items.Count - 1 do
  begin
    string:=listbox1.Items.Strings[x];
Ich hoffe, du hast die Variable nicht wirklich "string" genannt, oder? Das ist keine gute Idee, da String ein reserviertes Wort und auch ein Funktionsname ist, also sehr viel Raum für Seiteneffekte lässt. :? Nenn die Variable doch z.B. "tmpString" oder so. :idea:

cu
Narses


keine angst :D wollte nur zeigen dass es sich hier halt um eine string variable handelt war im nachhinein wohl nicht gut durchdacht

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Hallo $ebbi,
außer dem schon Genannten (Variable darf nicht string heißen), funktioniert auch die Zählschleife nicht, da zu Beginn der Schleife der Endwert ermittelt wird. Löschst Du einen Eintrag, so ändert sich die Zahl der Einträge, jedoch nicht der Endwert der Schleife. Besser ist eine endprüfende Schleife, z.B.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  x := 0;
  repeat
    k:=listbox1.Items.Strings[x];
    if k[length(k)] = 'p' then listbox1.Items.Delete(x)
                          else inc(x);
  until x>Listbox1.items.Count - 1;

x wird nur dann erhöht, wenn der String nicht gelöscht wurde. Andernfalls überspringst Du Einträge.
Beste Grüße
Mathematiker


jop ist mir beim testen dann auch aufgefallen