![]() |
Problem bei for Schleife
Code:
zu meinem Problem:
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; 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 |
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. |
Re: Problem bei for Schleife
probiers mal mit downto
|
Re: Problem bei for Schleife
Zitat:
|
Re: Problem bei for Schleife
vllt so??
Delphi-Quellcode:
edit:
//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; aber wieso überhaupt so umständlich?? wenn du nur das memo "leeren" willst, kannst du das auch so:
Delphi-Quellcode:
memo1.lines.clear;
|
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);
|
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 |
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).
|
Re: Problem bei for Schleife
Zitat:
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 |
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 |
Re: Problem bei for Schleife
Das Problem ist einfach, dass sich der Index der Memo.Lines ändert, sobald du eine Zeile daraus löschst.
Entweder du machst es mit downto ...
Delphi-Quellcode:
... oder einer repeat-until-Schleife
procedure TForm1.ReplaceClick(Sender: TObject);
var i: integer; begin for i := Memo1.Lines.Count - 1 downto 0 do begin try [Befehl] except Memo1.Lines.Delete(i); end; end; ReplaceClick(Self); end;
Delphi-Quellcode:
Du solltest dir auch überlegen, ob es das richtige ist, eine Exception zu werfen, wenn dein Ereignis eintritt. Warum nicht eine if-Abfrage?
procedure TForm1.ReplaceClick(Sender: TObject);
var i: integer; begin i := 0; repeat try [Befehl] except Memo1.Lines.Delete(i); i := 0; continue; // kA, ob das in nem except-Block geht end; inc (i); until i > Memo1.Lines.Count - 1; ReplaceClick(Self); end;
Delphi-Quellcode:
... oder so?
if WordFound (Memo1.Lines[i]) then
Memo1.Lines.Delete(i); |
Re: Problem bei for Schleife
Zitat:
|
Re: Problem bei for Schleife
Danke für deine Antwort... Kumpel hat mir den Weg mal so gezeigt :-P Derzeit funzt alles iweder so wie es sollte, nur bringt mein prog jetzt Fehlermeldung mit Integerüberlauf :-P
Kann mir wer mal auf meinen Weg ne verschachtelte schleife vorbauen?!? Sache: 1 Schleife (soll die anderen 2 Schleifen 2 mal wiederholen) 2 Schleife (darin sollen dann die Wörter zb. unentlich aus dem Memo mit Memo1.Lines[i] übergeben werden (da immer mal unterschiedliche viele Wörter drin stehen)) 3 Schleife (Wenn in Schleife 2 ein Error ausgelöst wird und dann der letzte Eintrag aus dem memo gelöscht wird mit Memo1.Lines.Delete(i-1) dannach soll schleife bsp x mal aktiv werden) Meine Befehle funzen ja in einzelnen Teilen, nur der Zusammenbau der Schleife macht mir grad kopfzerbrechen! Vielen Dank im Voraus für eure Hilfe *schwitz* |
Re: Problem bei for Schleife
Wird wohl keiner machen hier. Zumindest würde ich's nicht. Weil das ist ein Problem, was sich durch gründliches überdenken und nachvollziehen der Schleife lösen lassen kann. Und denkarbeit wird dir hier sicher keiner abnehmen. ;)
|
Re: Problem bei for Schleife
Problem war nur, das ich langsam an mir selber zweifle, weil schleife 100% korrekt ist, was mir auch gesagt wurde... nur kommt einen immer mal der Gedanke das man nen fasselfehler drin hat!
MFG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 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-2025 by Thomas Breitkreuz