Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem bei for Schleife (https://www.delphipraxis.net/107408-problem-bei-schleife.html)

Asatru 27. Jan 2008 11:36


Problem bei for Schleife
 
Code:
procedure TForm1.ReplaceClick(Sender: TObject);
var
i: integer;
begin
for j:= 0 TO 200 DO begin
try
[Befehl]
except
Memo1.Lines.Delete(i-1);
end;
end;
ReplaceClick(Self);
end;
zu meinem Problem:

Ich hab 1 memo in den ich untereinander gewisse Wörter schreibe. Wird das prog gestartet, so wird gleich eine PHP datei geladen. Drück ich nun meinen Button, soll anhand der Schleife nacheinander die eingeschriebenen Worte gesucht werden und mit vorgegeben ersetzt werden. Die Line im Memo spreche ich mit Memo1.Lines[i] an. Der erste lauf funktioniert wunderbar. Falls es ein Wort nicht gibt wird es mit der Error meldung aus dem Memo gelöscht. Wenn es gelöscht ist, soll er wieder von Anfang an anfangen auch mit den Wörtern die vorher schon gesucht wurden. Derzeitiges Prob: Wenn ein Error verursacht wurde und das letzte Wort oder Wortkette gelöscht wurde, fängt er dann 3 lines unter dem letzten an und nicht von anfang an! Kann mir sagen warum die schleife nicht so will wie ich?!?


MFG

Muetze1 27. Jan 2008 11:40

Re: Problem bei for Schleife
 
Du solltest die Compilerwarnungen beachten! Die For Schleifenvariable sollte eine lokale Variable sein, sagt dir der Compiler!

Die Schleife läuft mit j und du löscht i.

Blackheart 27. Jan 2008 11:41

Re: Problem bei for Schleife
 
probiers mal mit downto

Asatru 27. Jan 2008 11:43

Re: Problem bei for Schleife
 
Zitat:

Zitat von Muetze1
Du solltest die Compilerwarnungen beachten! Die For Schleifenvariable sollte eine lokale Variable sein, sagt dir der Compiler!

Die Schleife läuft mit j und du löscht i.

sorry hab mich da vertippt es ist i

lbccaleb 27. Jan 2008 11:44

Re: Problem bei for Schleife
 
vllt so??


Delphi-Quellcode:
//nicht getestet
procedure TForm1.ReplaceClick(Sender: TObject);
var
i: integer;
  begin
    for i := 0 to 200 do
    try
    except
      Memo1.Lines.Delete(i - 1);
  end;
  ReplaceClick(Self);
end;
edit:
aber wieso überhaupt so umständlich?? wenn du nur das memo "leeren" willst, kannst du das auch so:
Delphi-Quellcode:
memo1.lines.clear;

MrKnogge 27. Jan 2008 11:51

Re: Problem bei for Schleife
 
Wenn deine Schleife bei 0 beginnt, musst du schon das -1 weglassen !

Delphi-Quellcode:
Memo1.Lines.Delete(i); // nicht: Memo1.Lines.Delete(i - 1);

Asatru 27. Jan 2008 11:59

Re: Problem bei for Schleife
 
das Komische ist, hatte das prog schonmal fertig, nach format c alles weg :-P nur hatte ich glück und Kumpel hatte noch Quellcode da gehabt, nur will die schleife nun nicht wieder von anfang an starten. Das i-1 muss ja sein, da wenn Error kommt ist die schleife ja schon eine zeile weiter unten und muss aber den darüber löschen, also -1

@lbccaleb

Dein code will auch nicht!


PS: Angenommen er durchläuft alles und findet das gesucht wort im memo Line 5, danach gibts ein Error, dannach wird mit i-1 der letzte Wert (Line 5) gelöscht, weil schleife in line 6 schon ist! Nun soll die schleife aber wirder von Line 1 an beginnen und nciht von Line 8 wie es derzeit der fall ist!


MFG

Muetze1 27. Jan 2008 12:24

Re: Problem bei for Schleife
 
Hast du eigentlich die Bereichs- und Überlaufprüfung eingeschaltet? Wenn nicht, dann mal in den Projektoptionen beim Compiler machen und das Projekt erneut erstellen (nicht compilieren).

Klaus01 27. Jan 2008 12:33

Re: Problem bei for Schleife
 
Zitat:

Zitat von Asatru
PS: Angenommen er durchläuft alles und findet das gesucht wort im memo Line 5, danach gibts ein Error, dannach wird mit i-1 der letzte Wert (Line 5) gelöscht, weil schleife in line 6 schon ist! Nun soll die schleife aber wirder von Line 1 an beginnen und nciht von Line 8 wie es derzeit der fall ist!

Da in der for Schleife die Schleifenvariable nicht geändert werden sollte.
Solltest Du dir überlegen die Schleife nicht als while-do oder repeat-until Schleife
anzulegen. Denn da kannst Du die Schleifenvariable manipulieren.

Grüße
Klaus

Asatru 27. Jan 2008 17:35

Re: Problem bei for Schleife
 
Hab Bereichs- und Überlaufprüfung eingeschaltet und alles neu geschrieben und siehe da, nun läuft die schleife wie sie soll....

Was hat Bereichs- und Überlaufprüfung zu bedeuten?


MFG


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 Uhr.
Seite 1 von 2  1 2      

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