AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi StringList Schieße über count hinaus beim löschen
Thema durchsuchen
Ansicht
Themen-Optionen

StringList Schieße über count hinaus beim löschen

Ein Thema von Schuster · begonnen am 23. Feb 2005 · letzter Beitrag vom 24. Feb 2005
Antwort Antwort
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#1

StringList Schieße über count hinaus beim löschen

  Alt 23. Feb 2005, 11:48
Bitte schaut euch den Code an ich find den Fehler nicht.

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;
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: StringList Schieße über count hinaus beim löschen

  Alt 23. Feb 2005, 11:52
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: StringList Schieße über count hinaus beim löschen

  Alt 23. Feb 2005, 12:06
Zitat von alcaeus:
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
Schließe mich dir an!

bei sowas immer
Delphi-Quellcode:
Var i: Integer
Begin
  For i := Count - 1 DownTo 0 Do Begin
    //DoSomething
  End;
End;
benutzen

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Schuster
Schuster

Registriert seit: 21. Okt 2004
Ort: Wien
176 Beiträge
 
Delphi XE7 Architect
 
#4

Re: StringList Schieße über count hinaus beim löschen

  Alt 23. Feb 2005, 12:08
Thx wußte nicht das bei ner for schleife der Wert in nachhinein nicht mehr geprüft wird.

Habs mit while gelöst.
Markus Schuster
__________________
Markus
http://members.chello.at/delphi-developer
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: StringList Schieße über count hinaus beim löschen

  Alt 24. Feb 2005, 15:06
Zitat von Schuster:
...
Habs mit while gelöst.
Finde ich auch besser als mit for, da man mit while bei diesem Problem auch hochzählen kann und nicht nur runterzählen wie bei for.
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:05 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