Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - bestimme Zeilen aus TStringList löschen


CodeRed - Do 31.03.05 14:20
Titel: bestimme Zeilen aus TStringList löschen
Hi!
Ich hab wieder ein Mal ein Problem...
Und zwar hab ich eine StringList mit vielen Zeilen. Nun möchte ich darin jede Zeile, die nicht mit einer Zahl (1,2,..,0) beginnt löschen. Ich hoffe es gibt dafür eine Lösung.
Da ich sehr unerfahren mit der StringList bin wäre es super, wenn ihr mir vielleicht n paar Zeilen aufschreiben könntet.

Thx!!


AXMD - Do 31.03.05 14:28

Du durchsuchst die Stringliste vom letzten Item bishin zum ersten und löschst dann mit der Methode Delete(i) (wobei i deine Laufvariable ist) all jene Einträge, die mit einer Zahl beginnen (musst du mit einem if abfragen). Mehr zu den Methoden findest du in der Delphihilfe

AXMD


Sprint - Do 31.03.05 14:32


Delphi-Quelltext
1:
2:
3:
4:
5:
  for I := MyStringList.Count - 1 downto 0 do
    if Length(MyStringList.Strings[I]) > 0 then
      case MyStringList.Strings[I][1of
        '0'..'9': MyStringList.Delete(I);
      end;



Edit: \\ Hatte deine Frage falsch gelesen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  for I := MyStringList.Count - 1 downto 0 do
    if Length(MyStringList.Strings[I]) > 0 then
      case MyStringList.Strings[I][1of
        '0'..'9':;
      else
        MyStringList.Delete(I);
      end;


CodeRed - Do 31.03.05 16:41

ok, das hat funktioniert!!

gibt es auch ne möglichkeit leere zeilen zu löschen??
ich hab's mit
if Length(MyStringList.Strings[i]) = 0 then MyStringList.Delete(i);
versucht, doch da bekomm ich eine fehlermeldung.


jasocul - Do 31.03.05 16:45

user profile iconCodeRed hat folgendes geschrieben:
versucht, doch da bekomm ich eine fehlermeldung.

Welche?
Bitte immer dran denken, die Meldung mit aufzuschreiben.


CodeRed - Do 31.03.05 17:05

wollte ich gerade noch editieren, dann ist mir's laptop abgestürzt :)
und jetzt warst du schon schneller

also hier ist die Meldung: "Im Projekt Projekt1.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (232)'. Prozess wurde angehalten..."

diese meldung kommt allerdings nur, wenn ich die leeren zeilen auch noch löschen will. wenn ich die lösung von Sprint alleine hab funktioniert alles!!


Sprint - Do 31.03.05 17:19


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  for I := MyStringList.Count - 1 downto 0 do
    if Length(MyStringList.Strings[I]) > 0 then
    begin
      case MyStringList.Strings[I][1of
        '0'..'9':;
      else
        MyStringList.Delete(I);
      end;
    end else
      MyStringList.Delete(I);


CodeRed - Do 31.03.05 17:42

wie blind man doch sein kann ^^

naja, jetzt geht wenigstens alles!!

Thx