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 1 von 2  1 2      
Go2EITS

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

TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:29
Hallo DP,

sicherlich könnt Ihr mir wieder weiterhelfen:
Ich "hänge" an einem Problem:

Ich habe eine Schleife die von 1 to t.count läuft:
Delphi-Quellcode:
//T ist t:Stringlist //
for i=1 to t.count do
    begin
    if t[i]:=Suchstring then t.delete[i]
    end;
Da sich t.count in der Schleife verringert, bekomme ich natürlich einen Bereichsfehler.
Hat da jemand eine Ahnung, wie ich dies umgehen kann?

Vielen Dank für die Mühe im voraus.
Go2EITS
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:31
dann baue einfach ein if i <= t.count ein

  Mit Zitat antworten Zitat
Tyrael Y.

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

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:32
Delphi-Quellcode:
for i:=t.count-1 downto 0 do
begin
  if t[i]:=Suchstring then t.delete[i]
end;

downto ist dein freund
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:32
Delphi-Quellcode:
I:=0;
while I=0<t.count do
begin
  if t[I]:=Suchstring then t.delete[I];
  inc(I);
end;
Listen sind nebenbei 0-basiert. Von 1 bis t.count kriegst du sowieso ne Exception.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:38
Zitat von Tyrael Y.:
downto ist dein freund
Der andere Freund hieße repeat oder while.

Delphi-Quellcode:
i := 0;
while i < list.Count do
begin
  if list[i] = Suchstring then
    List.Delete(i)
  else
    Inc(i);
end;

// bzw

repeat
  if list[i] = Suchstring then
    List.Delete(i)
  else
    Inc(i);
until i = List.Count;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:43
@3_of_8

Manuel, das ist noch kein PASCAL. Und warum überprüfst du nicht immer alle Elemente der Liste?

//Edit
Den zweiten Satz darf Dax auch lesen

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Bowler
Bowler

Registriert seit: 8. Sep 2003
Ort: Bochum
148 Beiträge
 
Delphi XE7 Enterprise
 
#7

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:47
Zitat von Dax:
Zitat von Tyrael Y.:
downto ist dein freund
Der andere Freund hieße repeat oder while.

Delphi-Quellcode:
i := 0;
while i < list.Count do
begin
  if list[i] = Suchstring then
    List.Delete(i);
  Inc(i);
end;

// bzw

repeat
  if list[i] = Suchstring then
    List.Delete(i);
  Inc(i);
until i = List.Count;
Aber auch nur, wenn list.Count bei jedem Durchlauf aktualisiert wird. Ansonsten gibt es IMHO den gleichen Fehler, wie in einer for-Schleife, da die while- oder repeat-Schleife dann übers Ziel hinaus läuft.

Gruß
Christian
Christian Rüsken
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#8

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:54
Zitat von Bowler:
Aber auch nur, wenn list.Count bei jedem Durchlauf aktualisiert wird. Ansonsten gibt es IMHO den gleichen Fehler, wie in einer for-Schleife, da die while- oder repeat-Schleife dann übers Ziel hinaus läuft.
Count ist eine ReadOnly-Property, welche beim Hinzufuegen und Entfernen eines Elementes, bzw. dem Loeschen der gesamten Liste immer aktualisiert wird.
Es waere nicht nur in diesem Fall suboptimal, wenn ich 10 Elemente in der Liste habe, aber Count mir angibt, ich haette 15 drinnenliegen

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#9

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 15:56
Zitat von Tyrael Y.:
Delphi-Quellcode:
for i:=t.count-1 downto 0 do
begin
  if t[i]:=Suchstring then t.delete[i]
end;

downto ist dein freund
Da schliess ich mich an.. so mach ich das auch immer
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Klaus01

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

Re: TStringlist: Delete in einer Schleife

  Alt 5. Sep 2006, 16:02
und noch eine Schleife:

Delphi-Quellcode:
while t.IndexOf(suchstring) > -1 do
  t.delete(t.indexOf(suchstring);
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:42 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