![]() |
StringList Schieße über count hinaus beim löschen
Bitte schaut euch den Code an ich find den Fehler nicht. :wall:
Am Anfang habe ich eine Anzahl von 114 Zeilen. Nach dem löschen nur noch 109 aber in meiner for Schleife for x:=2 to Anzahl schießt x darüber hinaus. Obwohl Anzahl in der for schleife upgedatet wird. Wird der Wert (Anzahl) nicht mehr überprüft wenn man schon in der for schleife ist?? Wenn ich mit einer Repeat schleife arbeiten würde das dann funken :?:
Delphi-Quellcode:
function TOmds.OmdsCount():integer; //Anzahl Datensätze
begin result:= MeineString_List.Count -1; end; procedure TForm1.Button1Click(Sender: TObject); var x :integer; begin if MOmds.LadeOmds('C:\Programme\Borland\Delphi7\Projects\OMDS1.1\M1035390_20040407_023824_01.TXT')=true then begin Anzahl:= MOmds.OmdsCount; for x:=2 to Anzahl do begin Anzahl:= MOmds.OmdsCount; if MOmds.IstPerson(x)= true then //Person begin Stringgrid1.RowCount:= Stringgrid1.RowCount+1; StringGrid1.Cells[0,x-2]:= MOmds.GetAnrede(x); StringGrid1.Cells[1,x-2]:= MOmds.GetTitel(x); StringGrid1.Cells[2,x-2]:= MOmds.GetFamName(x); end; //Ende Person if MOmds.IstAuto(x)= true then begin Stringgrid1.RowCount:= Stringgrid1.RowCount+1; StringGrid1.Cells[0,x-1]:= MOmds.GetAutoArt(x); StringGrid1.Cells[1,x-1]:= Momds.GetAutoMarke(x); StringGrid1.Cells[2,x-1]:= MOmds.GetAutoTyp(x); end; //Ende ist Auto if MOmds.IstSchaden(x)=true then begin end; end; //Ende gehe omds count durch end; //ende Omds geladen end; function TOmds.GetAutoPolNr(x:Integer):String; //Auto PolNr begin if Doppelter_Eintrag(x,13,25)=false then //Doppelte im OMDS herausfiltern result:=trim(copy(MeineString_List.Strings[x],13,25)) else begin MeineString_List.Delete(x+1); //Wenn doppelter nur in nächster Zeile möglich end; end; function TOmds.Doppelter_Eintrag(x,pos,anz:Integer):boolean; //Doppelter Eintrag?? var temp: string; begin temp:= trim(copy(MeineString_List[x],pos,anz)); if temp = trim(copy(MeineString_List[x+1],pos,anz)) then result:= true else result:=false; end; |
Re: StringList Schieße über count hinaus beim löschen
Zum wasweißichwievielten Mal: Löschen immer von hinten nach vorne. Die Grenzen einer for-Schleife und die Laufvariable der Schleife können in der Schleife nicht verändert werden. Ergo: downto oder while verwenden.
Greetz alcaeus |
Re: StringList Schieße über count hinaus beim löschen
Zitat:
bei sowas immer
Delphi-Quellcode:
benutzen :zwinker:
Var i: Integer
Begin For i := Count - 1 DownTo 0 Do Begin //DoSomething End; End; Bye |
Re: StringList Schieße über count hinaus beim löschen
Thx wußte nicht das bei ner for schleife der Wert in nachhinein nicht mehr geprüft wird. :duck:
Habs mit while gelöst. |
Re: StringList Schieße über count hinaus beim löschen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz