Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi WriteLn begrenzt? (https://www.delphipraxis.net/64465-writeln-begrenzt.html)

HaCkAttaCk2001 3. Mär 2006 23:16


WriteLn begrenzt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi @ all.

Ich habe ein Programm geschrieben, dem ich eine Textdatei übergeben kann (derzeit noch hardcoded, ich brauch das Prog nur intern). Das Programm bastelt jede mögliche Kombination der Wörter dieser Textdatei zusammen, und zwar in dem Format: wortzahlwort (z.B. test1test). Das ganze wird dann als Textdatei gespeichert, eine Kombination je Zeile.

Das Programm selbst funktioniert eigentlich, aber es bricht plötzlich mit dem Schreiben per WriteLn ab. Es kommt keine Fehlermeldung oder Warnung. Es hört einfach mitten im Schreiben der Textdatei auf und tut so, als ob es fertig wäre.

Der Code ist nicht sehr lang, und da man es im Zusammenhang vielleicht besser versteht, hab ich ihn mal komplett angehangen. Derzeit ist ne ProgressBar mit drin, die ist aber noch nicht eingearbeitet.

Drückt einfach einmal auf Start, wartet 2 Sekunden und schaut euch die gen.txt an. Warum bricht der Schreibvorgang einfach ab?


C ya.

PS: Ja, ich weiß, man soll nicht mit dermaßen vielen globalen Variablen arbeiten, aber es ist auch nicht für eine weltweite Vermarktung gedacht :P .

Edit:

Für alle, die sich nichts runterladen wollen :P :

Delphi-Quellcode:
var
  Form1: TForm1;
  Anzahl : Integer;
  F : Textfile;
  G : Textfile;
  Zahl : Integer;
  Zaehldurchlauf : Integer;
  Wort2 : Integer;
  ErstesWort : String;
  ZweitesWort : String;
Delphi-Quellcode:
function PasswortGen() : String;
begin
  if Zaehldurchlauf < Anzahl*Anzahl then
  begin
    Zaehldurchlauf := Zaehldurchlauf + 1;
  end
  else
  begin

    if Zahl < 9 then
      Zahl := Zahl + 1
    else
      Zahl := 0;
    Zaehldurchlauf := 1;
    Reset(G);
    Reset(F);
  end;

  if Wort2 < Anzahl then
  begin
    ReadLn(G,ZweitesWort);
    Wort2 := Wort2 + 1;
  end
  else
  begin
    Reset(G);
    ReadLn(G,ZweitesWort);
    Wort2 := 1;
    Readln(F,ErstesWort);
  end;

  result := ErstesWort + IntToStr(Zahl) + ZweitesWort;
end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Z : Textfile;
  FileName : String;
  Zieldatei : String;
  Maximum : Integer;
  Durchlauf : Integer;
  Passwort : String;
begin
  FileName := ExtractFileDir(ParamStr(1)) + 'test.txt';
  AssignFile(F,Filename);
  Reset(F);
  while not eof(F) do
  begin
    Readln(F);
    Anzahl := Anzahl + 1;
  end;
  Reset(F);
  ReadLn(F,ErstesWort);
  AssignFile(G,Filename);
  Reset(G);
  Wort2 := 0;
  Zahl := 0;
  Label2.Caption := IntToStr(Anzahl);
  Maximum := Anzahl*Anzahl*10;
  Label6.Caption := IntToStr(Maximum);
  Zieldatei := ExtractFileDir(ParamStr(1)) + 'gen.txt';
  AssignFile(Z,Zieldatei);
  ReWrite(Z);
  for Durchlauf := 1 to Maximum do
  begin
    WriteLn(Z,PasswortGen());
  end;
end;
3 Labels auf der Form platzieren und die Label2, -4 und -6 nennen und einen Button draufwerfen.

Was zum testen (in eine test.txt schreiben und ins Progverzeichnis legen :D):

Zitat:

aaaa
aaab
aaac
aaad
aaae
aaaf
aaag
aaah
aaai
aaaj
aaak
aaal
aaam
aaan
aaao
aaap
aaaq
aaar
aaas
aaat
aaau

turboPASCAL 3. Mär 2006 23:40

Re: WriteLn begrenzt?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und Zurück. Nach dem du eine Datei geöffnet hast musst du sie nach getaner Arbeit auch wieder schliessen, sonst gibt es Probleme.

HaCkAttaCk2001 4. Mär 2006 00:09

Re: WriteLn begrenzt?
 
Ach, das FileClose :wall: .


Dankeschön :thumb: .

Hey, du hast ja so einiges gradegerückt. War dir langweilig? Big thx :D .

:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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