Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prblem bei erstellen einer txt datei (https://www.delphipraxis.net/144371-prblem-bei-erstellen-einer-txt-datei.html)

jonsen2.0.0.9 6. Dez 2009 13:27

Re: Prblem bei erstellen einer txt datei
 
ja hab angesehen und versuche das gerade bei mir einzubauen nur du siehst ja welche fehler da auftauchen warum auch immer...

himitsu 6. Dez 2009 13:27

Re: Prblem bei erstellen einer txt datei
 
Zitat:

Zitat von jonsen2.0.0.9
es gibt keine Fehlermeldung sondern der Taskmanager meint keine Rückmeldung und meine CPU ist bei 90-100%(beide) auslastung (duel core 3ghz pro kern)

und warte mal etwas ... irgendwann kommt 'ne "Stack-Voll"-Exception :zwinker:

und genau sowas fällt beim Debuggen auf :warn:

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ..
  Close;
end;
OnClose (diese Prozedur) wird aufgerufen
Close ruft ebenfalls Diese (sich selber) auf
= Endlosschleife


und dann nochwas:
=true oder =false nutzt man NIE zum vergleichen/prüfen
die globale Objektvariable (hier Form1) nutzt man NIE innerhalb des Objektes selber

Micha88 6. Dez 2009 13:28

Re: Prblem bei erstellen einer txt datei
 
Zitat:

Zitat von jonsen2.0.0.9
ja hab angesehen und versuche das gerade bei mir einzubauen nur du siehst ja welche fehler da auftauchen warum auch immer...

Also bei mit läuft es ohne Exceptions, ohne hohe CPU :/

jonsen2.0.0.9 6. Dez 2009 13:31

Re: Prblem bei erstellen einer txt datei
 
was nutze ich denn anstelle von =true = false?

gut DANKE für den tipp mit der endlosschleife geht ohne die :oops:

und das programm läuft jetzt auch so wie es laufen soll...DANKE AN ALLE
:thumb:

jonsen2.0.0.9 6. Dez 2009 13:32

Re: Prblem bei erstellen einer txt datei
 
michael habe bei mir auch was geändert um das an mein programm anzupassen...hab aber etwas falsch gemacht !

hatte ausversehen endlosschleife drin.... :oops:

Progman 6. Dez 2009 13:37

Re: Prblem bei erstellen einer txt datei
 
Weil du wahrscheinlich eine Endlosschleife programmiert hast :)
Man macht keine for-Schleifen über Listen, deren Elemente in der for-Schleife gelöscht werden. Irgendwann greift die Laufvariable ins Leere. Das löst man besser mit while. (So als Anmerkung) :warn:

Matze 6. Dez 2009 13:40

Re: Prblem bei erstellen einer txt datei
 
Zitat:

Zitat von jonsen2.0.0.9
was nutze ich denn anstelle von =true = false?

Das wurde z.T. bereits geschrieben:

Delphi-Quellcode:
// true
if CheckListBox1.Checked[i] then

// false
if not CheckListBox1.Checked[i] then
Grüße, Matze

wicht 6. Dez 2009 13:44

Re: Prblem bei erstellen einer txt datei
 
Zitat:

Man macht keine for-Schleifen über Listen, deren Elemente in der for-Schleife gelöscht werden. Irgendwann greift die Laufvariable ins Leere. Das löst man besser mit while. (So als Anmerkung)
Was spricht denn außer ästhetischen Gründen dagegen? Die Laufvariable ist am Ende meist 0, und das ist dann, wenn ich das letzte Element lösche, bevor die Schleife zuende ist. Oder ist das falsch?

Progman 6. Dez 2009 16:48

Re: Prblem bei erstellen einer txt datei
 
Will man alle Einträge einer Liste löschen, ist while ideal:
Delphi-Quellcode:
while Liste.Count > 0 do Liste.Delete(0);
Will man nur Einträge löschen, die einer bestimmten Bedingung genügen dann ergäbe eine for-Schleife (im Mindestfall) falsche Ergebnisse.
Beispiel:
Delphi-Quellcode:
for i:=0 to Liste.Count-1 do begin
  if Liste[i]=Bedingung then Liste.Delete(i);
end;
Angenommen, die Liste hat 5 Einträge (0..4) und Eintrag 2 erfüllt die Bedingung. Dann würde er gelöscht und Eintrag 3 würde zu 2 und 4 zu 3. Die Laufvariable i wird aber erhöht und prüft als nächstes Liste[3], die ja vorher die 4 war. Die eigentliche ursprüngliche 3 wird gar nicht mehr geprüft, sondern "übersprungen".
Das sind so die kleinen Stolpersteine, die einen dann ins Grübeln bringen :)

himitsu 6. Dez 2009 17:02

Re: Prblem bei erstellen einer txt datei
 
@Progman: darum läßt man in soeinem Fall die Schleife rückwärts laufen,
so wie es auch schon gemacht wurde.
Delphi-Quellcode:
for i := Pred(CheckListBox1.Items.Count) downto 0 do
Dann gibt es dieses Problem auch nicht.

Beim Vorwärtslaufen gibt es 2 Probleme:
- Delphi merkt sich das Ende der schleife und fragt dieses nur einmal ab
drum kann man da auch über das Listenende hinausgeraten, wenn die Liste kürzer wird
- wird etwas gelöscht, dann wird der nächste Index übersprungen, da er ja nun den selben Index bekommen hat


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 Uhr.
Seite 2 von 2     12   

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