AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TStringlist: Delete in einer Schleife
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist: Delete in einer Schleife

Ein Thema von Go2EITS · begonnen am 5. Sep 2006 · letzter Beitrag vom 5. Sep 2006
Antwort Antwort
Seite 2 von 2     12   
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#11

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:06
Zitat von Klaus01:
und noch eine Schleife:

Delphi-Quellcode:
while t.IndexOf(suchstring) > -1 do
  t.delete(t.indexOf(suchstring);
Grüße
Klaus
Diese Schleife ist nur nützlich wenn jeder Eintrag nur einmal innerhalb der Liste besteht, da nur der erste gefundene gelöscht wird.
Ansonsten ist es auch ok.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:10
Zitat von Tyrael Y.:
Zitat von Klaus01:
und noch eine Schleife:

Delphi-Quellcode:
while t.IndexOf(suchstring) > -1 do
  t.delete(t.indexOf(suchstring);
Grüße
Klaus
Diese Schleife ist nur nützlich wenn jeder Eintrag nur einmal innerhalb der Liste besteht, da nur der erste gefundene gelöscht wird.
Ansonsten ist es auch ok.
Ich denke mal das sie anders arbeitet,
so wie ich es sehen wird die while schleife
so lange wiederholt bis der Suchstring nicht
mehr gefunden wird (-1).

Nachdem der erste Eintrag gefunden wurde, wird er gelöscht.
Bei einem weiteren Durchlauf wird wenn ein zweiter Eintrag gefunden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#13

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:13
....ups hast Recht, sry *schäm*

Die Schleife funktioniert.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#14

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:16
@Alle:
Vielen Dank für Eure schnellen und, für mich zumindestens, so interessanten Antworten.

Genau das ist das Problem: Wenn List.count = 10 ist, wird mit List.delete list.count zu 9.
Die übliche for-Schleife bringt einen Bereichserror.

Ich probiere die Lösung mit for I=List.count downto 0 Sie erscheint diese Lösung die Schlüssigste zu sein.

Ich verfolge aber sehr aufmerksam die Diskussion mit While/repeat.
Wenn mein Code läuft, probiere ich mal die Repeat/Whileversion aus.

Vielen Dank und ich berichte, wie es läuft.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:25
Das wäre falsch, wenn dann  For i := List.Count-1 DownTo 0 Do du hast die -1 bei Count vergessen.

Und zu der angemerkten Repeat/Until Schleife: Die ist nur richtig, wenn man vorher sicherstellt, dass mindestens ein Element in der Liste enthalten ist, weil er beim ersten Durchlauf sofort auf das i. Element zugreift, wobei i wohl mit 0 initialisiert worden ist. Daher: immer aufpassen bei Fuss-gesteuerten Schleifen, da die Bedingung immer erst nach einem Durchlauf überprüft wird.

Und dann noch zu der Count Read Only Anmerkung: Dies kann man nur auf TStrings und seine Nachfahren anwenden, bei anderen Liste wie z.B. von TList abgeleitet ist Count setzbar um eine bessere Speicheroptimierung zu erreichen. Wenn man weiss dass man 40 Einträge hinzufügt, kann man bei den Listen dieses Optimierter gestalten.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#16

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:26
Zitat von Go2EITS:
Ich probiere die Lösung mit for I=List.count downto 0 Sie erscheint diese Lösung die Schlüssigste zu sein.
Du musst aber bei List.Count-1 anfangen, nicht vergessen

Delphi-Quellcode:
for i := List.count -1 downto 0 do
begin
  if List[i] = Suchstring then
    List.delete[i]
end;
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#17

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:44
@Muetze1
Habe meinen Fehler mit List.count vom Compiler um die Ohren bekommen und in list.count-1 geändert.
Es klappt mit dem Downto prima. Die While/Repeat-Schleifen sind für den Zweck etwas umständlich.
[EDIT]
Die Lösung von Klaus01 funktioniert doch besten! Ich habees gerade ausprobiert.
[\EDIT]

Super Antworten, da hat man sein Brain V1.0 ein wenig anstrengen müssen.
Vielen Dank, kann nun weiter arbeiten!

Go2EITS

@Tyrael Y. genauso habe ich es gelöst!
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:48
Zitat von Go2EITS:
@Muetze1

Aber wenn ich den Suchstring gefunden haben, habe ich immer noch Strings in der Schleife.
Die -1 wird nie erreicht.

Go2EITS

@Tyrael Y. genauso habe ich es gelöst!
Die -1 wird erreicht, wenn Dein Suchstring nicht gefunden wurde.
IndexOf ist etwas anderes als TstringList.count.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#19

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:55
@Klaus01
Habe gerade Deinen Vorschlag ausprobiert. Du hast recht. Es geht. Ich habe meinen Beitrag oben schnell geändert. Vielen Dank!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz