Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Textzeile in Txt auslesen (https://www.delphipraxis.net/25697-textzeile-txt-auslesen.html)

Alexander Roth 16. Jul 2004 06:43

Re: Textzeile in Txt auslesen
 
Ja, könnte sein dass mit den Variablenwerten mein Fehler liegt. Ich probier mal weiter.
Was macht reset? Ich hab gelesen es würde eine Datei öffnen.
Frage: Was öffnet denn eine Datei damit man im Quellcode reinschreiben kann???

GuenterS 16. Jul 2004 07:31

Re: Textzeile in Txt auslesen
 
Zitat:

Zitat von Alexander Roth
Ja gut, ich habs jetzt umgestellt, klappt aber trotzdem noch nicht. Der Computer hat nun einen seiner anderen Fehler ausgespuckt beim ausführen.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var   sl: TStringList;
    f:textfile;

begin

assignfile(f, 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt');
rewrite(f);
write(f, '2');
closefile(f);
sl := TStringList.Create;

    while j < aerg do
      begin
        sl.loadfromfile('E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt');
        primzahl:=strtoint64(sl[j]);
        sl.free;
      end;
end;

Das kann ja auch gar nicht funktionieren! Du gibst innerhalb der Schleife die StringListe wieder frei.
auch würde es reichen wenn du die Datei nur einmal ladest und nicht in jedem Durchgang.

Würde es so vorschlagen


Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
const
  CFileName = 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt';
var
  sl: TStringList;
  f:textfile;
  j,aerg: integer;
begin
  j:=0;
  assignfile(f, CFileName);
  rewrite(f);
  write(f, '2');
  closefile(f);
  sl := TStringList.Create;
  try
    sl.loadfromfile(CFileName);  
    while ((j < aerg) and (j < sl.count)) do
    begin
      primzahl:=strtoint64(sl[j]);
      j := <...>
    end;
  finally
    sl.free;
  end;
end;
Irgendwas mußt Du mit diesem j schon noch machen, sonst hast Du eine Endlosschleife

Rackergen2 16. Jul 2004 11:54

Re: Textzeile in Txt auslesen
 
nebenbei hast du da eine nette Endlosschleife, da du werder j noch aerg veränderst... ich nehme an, du willst j jedesmal um eins erhöhen? das geht am Besten mit inc(j) oder du machst eine for-Schleife...

GuenterS 16. Jul 2004 15:15

Re: Textzeile in Txt auslesen
 
Zitat:

Zitat von Rackergen2
nebenbei hast du da eine nette Endlosschleife, da du werder j noch aerg veränderst... ich nehme an, du willst j jedesmal um eins erhöhen? das geht am Besten mit inc(j) oder du machst eine for-Schleife...


Das habe ich vorher eh auch schon dazugeschrieben und durch das j:= <...> angedeutet. Ein weiteres Problem besteht sicher durch die fehlende Initialisierung von aerg...

Alexander Roth 19. Jul 2004 13:54

Re: Textzeile in Txt auslesen
 
Das ist alles nicht das Problem. Das habe ich alles im hier aufgefürten Code weggelassen,(hab ich geschrieben) da es die übersichtlichkeit erhöht. Wenn es euch interessiert: Ich habe auch noch eine Schleife über diese gestülpt, in der allerdings nichts relevantes passiert. Es ist weder eine nicht deklarierte Variable (was der Compiler zweifelslos gemeldet hätte), noch ist es eine Endlosschleife oder ähnliches.

GuenterS 19. Jul 2004 13:59

Re: Textzeile in Txt auslesen
 
Naja vermutlich ist es genau diese Schleife...

Luckie 19. Jul 2004 14:36

Re: Textzeile in Txt auslesen
 
Obwohl dein Code schon korrigiert wurde:
Zitat:

Zitat von Alexander Roth
Der Computer hat nun einen seiner anderen Fehler ausgespuckt beim ausführen.

Gibt es einen Grund, warum du uns die genaue Fehlermeldung verschiegen hast?

GuenterS 19. Jul 2004 15:32

Re: Textzeile in Txt auslesen
 
Ich wäre überhaupt dafür mal die ganze Methode zu sehen und nicht nur die angeblich relevanten Teile. Wenns wirklich lang ist vielleicht als Anhang. Wird sonst ja doch nur ein Raten im Nebel. Man weiß ja auch nicht wo diese Schleife die über dem gesamten Code sein soll angeordnet ist...

Alexander Roth 20. Jul 2004 08:00

Re: Textzeile in Txt auslesen
 
Der code:
Code:
procedure TForm1.Button3Click(Sender: TObject);
const
  Pfad = 'E:\Delphi\Mathematik\Aufgelistete Primzahlen.txt';
var i,j,k : int64;
    primzahl:int64;
    sl: TStringList;
    f:textfile;
begin
assignfile(f,Pfad);
rewrite(f);
write(f, '2');
closefile(f);
zeit := time;
sl := TStringList.Create;
memo1.Clear;
abbruch := false;
aerg := 1;
j:=0;
nochr :=false;
if strtoint64(edit7.Text)<2 then exit else i:=3;
while i<strtoint64(edit7.Text)do
begin
  try
    while (j < aerg)and(j< sl.count) do
      begin
        sl.loadfromfile(pfad);
        primzahl:=strtoint64(sl[j]);
        if i mod primzahl > 0 then nochr:= true//primzahl noch ja
        else //keine Primzahl
            begin
              nochr:= false;
              j:= aerg;
            end;
        inc(j);
      end;
  finally
    sl.free;
  end;
//für das array und fürs weiterkommen und für die txt
    if (nochr=true)then
      begin
        inc(aerg);
        reset(f);
        writeln(i);
        closefile(f);
      end;
    statusbar1.Panels[4].Text:= 'Benötigte Zeit: ' + timetostr(time-zeit);
//    statusbar1.Panels[3].Text:= 'Dargest. Ergebnisse: '+inttostr(aserg);
    statusbar1.Panels[2].Text:= 'Ergebnisse: '+inttostr(aerg);
    statusbar1.Panels[1].Text:= 'Zahl: ' +inttostr(i);
    statusbar1.Panels[5].Text:= Format('%f', [aerg/i*100])+'% Erg.';
    application.ProcessMessages;
    if abbruch = true then
      begin
        statusbar1.Panels[5].Text:= Format('%f', [aerg/i*100])+'% Erg.';
        j:=aerg+1;
        i:=strtoint64(edit7.Text)+1;
      end;
  i:=i+2;
  j := 0;
end;
end;
Erklärungen: edit7 ist der Enwert
manche Variablen habe ich nicht als lokale Variable sondern als übergeordnete.


Zitat:

Gibt es einen Grund, warum du uns die genaue Fehlermeldung verschiegen hast?
Der Fehler wechselt machmal, wenn ich was verändere.
Zur Zeit gibt er diesen reizenden Fehler aus: (Wie bind ich denn hier Bilder ein, anscheinend granicht):
"Im Projekt mathematik.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Medlung: 'Zugriffsverletztung bei adresse 00000000. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzten."


Zitat:

Naja vermutlich ist es genau diese Schleife...
Ja vieleicht, aber letztens noch hat er bei der Exception immer die 2. Schleife mit dem j als Variable makiert. Jetzt makiert er nichts mehr.

GuenterS 20. Jul 2004 08:35

Re: Textzeile in Txt auslesen
 
ganz klar du gibst Deine ausserhalb der Schleife erzeugten TStringList frei, damit ist das Object zerstört und beim neuerlichen zugriff darauf hast Du eine AccessViolation was nicht anders zu erwarten ist.


Gib die Liste erst am Ende deiner Procedure ausserhalb der Schleifen frei. Um sie zu leeren kannst Du die Methode Clear der StringListe verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.
Seite 2 von 3     12 3      

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