TAN-Generator in Pascal?

Hallo zusammen,

Wie kann ich mit Pascal eine Art „TAN-Generator“ programmieren, welcher 50 TANs generiert und diese untereinander in eine Textdatei schreibt?
Die TANs werden schon erzeugt, soweit bin ich schon, allerdings hab ich ein Problem:

Beim Schreiben in die Textdatei überschreibt er immer den vorherigen TAN, anstatt den nächsten unten drunter zu setzen. Wie kann ich ihm sagen, dass er alle TANs untereinander schreiben soll? Ich habs schon mir einer FOR-TO-DO Schleife versucht, aber ich komm einfach nicht weiter … Hat jemand einen Vorschlag?

Danke schonmal für eure Hilfe,

Hyper-Horst

Hallo,

  1. Datei zum Schreiben öffnen (AssignFile und ReWrite)
  2. TANs reinschreiben (WriteLn)
  3. Datei schließen (CloseFile)

Fertig.

Als Code:
(ich setze mal an, dass die TANs als ein Array von Strings vorliegen; wenn du das anders gelöst hast, musst du den Code unten entsprechend ändern)

procedure SaveTANs(Filename:String; TANs:Array of String);
var
 F:Text;
 i:integer;
begin
 AssignFile(F,Filename);
 Rewrite(F);
 For i := low(TANs) to high(TANs) do WriteLn(F,TANs[i]);
 CloseFile(F);
end;

Sollten die TANs als Ganzzahl-Werte zwischen 1 und 9999 vorliegen, bekommst du mit FormatFloat(‚0000‘,TANs[i]) den 4-ziffrigen String mit führenden Nullen (aus 12 wird zB. ‚0012‘).

LG
Jochen

Vielen Dank schonmal!

Dieses Low und High kennt mein Compiler nicht, was bedeutet das überhaupt? Sind das Variablen? Wenn ja, als was muss ich die Deklarieren?
Hier mal ein Teil meines Codes:

ASSIGN(zahl,‚C:\Zufall~1\zahl.txt‘);
REWRITE(zahl);
WRITELN(zahl,zusammen[i]);
CLOSE(zahl);

Es ist ja logisch, dass hier immer der nächste TAN den vorherigen überschreibt, aber wie stelle es an, dass er einfach in die nächste Zeile springt und dort den nächsten speichert? Oder so ähnlich … :wink:

Hallo,

Dieses Low und High kennt mein Compiler nicht, was bedeutet
das überhaupt? Sind das Variablen? Wenn ja, als was muss ich
die Deklarieren?

Das sind Funktionen, welche die Indizes des ersten und des letzten Elements eines Arrays zurückgeben. Kann sein, dass das dein Pascal-Compiler (noch) nicht kennt. Wenn du genau weißt, dass dein Array von zB. [1] bis [50] geht, dann kannst du statt „low(array)“ auch direkt „1“ und statt „high(array)“ direkt „50“ angeben.

Hier mal ein Teil meines Codes:

ASSIGN(zahl,‚C:\Zufall~1\zahl.txt‘);
REWRITE(zahl);
WRITELN(zahl,zusammen[i]);
CLOSE(zahl);

Wo ist die Schleife, die eine TAN nach der anderen schreibt?

Ich nehme an, „zusammen“ ist das Array mit den TAN’s. dann müsste der Code so aussehen (die fehlende Schleife habe ich fett geschrieben):

 ASSIGN(zahl,'C:\Zufall~1\zahl.txt');
 REWRITE(zahl);
**FOR i := 1 TO 50 DO** WRITELN(zahl,zusammen[i]);
 CLOSE(zahl);

Es ist ja logisch, dass hier immer der nächste TAN den
vorherigen überschreibt,

Kann es sein, dass du den gesamten o.g. Code INNERHALB der Scleife aufrufst? Das wäre blöd, weil REWRITE(zahl) dann JEDESMAL die alte Datei löscht/überschreibt.

aber wie stelle es an, dass er
einfach in die nächste Zeile springt und dort den nächsten
speichert?

Mit WRITELN. Das „LN“ am Ende heißt „LINE“, also „schreibe einen Text und springe in die nächste Zeile“. Ein weiterer Aufruf von WRITELN (OHNE!! zuvor die Datei zu schließen und wieder zu öffnen!!) schreibt den nächsten Text automatisch in die nächste Zeile.

Oder so ähnlich … :wink:

Genau so.

LG
Jochen

Ich habs, dankeschön.

Das Problem war wirklich, dass das REWRITE in der Schleife mit drin war. Daran hätte ich aber nie gedacht :smiley:

Also nochmal vielen Dank für die Hilfe :smile:

Hyper-Horst