Textdatei anlegen

Hallo zusammen, habe folgende Frage:
Habe ein kleines Programm geschrieben, womit ich Schrittmotoren positionieren kann. Bei jeder Position möchte ich einen Sensoren einlesen und den Wert in eine Textdatei speichern.
Mit der Positionierung 1 (siehe Code) klappt es schon.
Nun möchte ich auch für die Positionierung 2 den Sensorwert in die selbe Textdatei schreiben, ohne den vorherigen Wert zu überschreiben.
Kann mir jemand helfen?
Danke.Grüße.

procedure TForm1.Button1Click(Sender: TObject);
var Text_Datei : TextFile;
s : String;
begin

//Start Positionierung 1
Wait(3000); // axis, pos, svel, mvel, Tacc
_8132_start_a_move( 0, 18000, 0, 3000, 0.1);

//In Textdatei schreiben
AssignFile (Text_Datei, ‚C:\Test.txt‘);
Rewrite(Text_Datei);
s := A_Volt.Text;
Write(Text_Datei,s);
CloseFile(Text_Datei);

//Start Positionierung 2
Wait(9000);
_8132_start_a_move( 0, 13000, 0, 2000, 0.3);

[Hier soll der nächste Wert bei dieser Position in die Test.txt geschrieben werden,
ohne den vorherigen zu überschreiben]

end;

Hallo Teddyman,

„Append“ heißt das Zauberwort.

var

f: TextFile;
begin
if OpenDialog1.Execute then
begin { eine Textdatei öffnen }
AssignFile(f, OpenDialog1.FileName);
Append(f);
Writeln(f, ‚Ich hänge jetzt etwas am Dateiende an.‘);
{ Hier steht Code, der ein Flush vor dem Schließen der Datei erfordert. }
Flush(f); { Sicherstellen, daß der Text tatsächlich in die Datei geschrieben wird. }
CloseFile(f);
end;
end;

Gruß
Manfred

Hallo,

Nun möchte ich auch für die Positionierung 2 den Sensorwert in
die selbe Textdatei schreiben, ohne den vorherigen Wert zu
überschreiben.

//In Textdatei schreiben
AssignFile (Text_Datei, ‚C:\Test.txt‘);
Rewrite(Text_Datei);
s := A_Volt.Text;
Write(Text_Datei,s);
CloseFile(Text_Datei);

öffne die Datei mit „Append“ statt „ReWrite“. Das ist alles.

Gruß
Martin

es klappt, aber…

öffne die Datei mit „Append“ statt „ReWrite“. Das ist alles.

habe die datein mit append ersetzt. die daten werden aber in eine zeile geschrieben.
kann man diese auch untereinander schreiben?
danke. mfg.

Hallo,

Wenn du die Datei zwischen den Positionierungen nicht auslesen mußt, dann laß die Datei doch einfach offen, bis alle Daten reingeschrieben sind und mach sie dann erst zu (ansonsten ist, wie gesagt, APPEND das Stichwort).

WICHTIG: Ich weiß nicht, wie die Einzelergebnisse in der Textdatei voneinander getrennt sind. Vielleicht erkennst du das ja an den Ergebnissen (vielleicht haben die ja eine fixe Länge). Wenn nicht, mußt Du aber irgendein Trennzeichen mit abspeichern. Am einfachsten wäre es, ein „Return“ zu nehmen, so daß jede Messung in einer eigenen Zeile der Texdatei steht. Dazu habe ich aus deinem Write ein WriteLn gemacht (s.u.)!

Trotzdem hier nochmal ein Beispiel für das, was ich meine:

procedure TForm1.Button1Click(Sender: TObject);
var 
 Text\_Datei : TextFile;
 s : String;
begin

 // Datei zum Schreiben öffnen
 AssignFile (Text\_Datei, 'C:\Test.txt');
 Rewrite(Text\_Datei);

 //Start Positionierung 1
 Wait(3000); // axis, pos, svel, mvel, Tacc
 \_8132\_start\_a\_move( 0, 18000, 0, 3000, 0.1);

 // Ergebnis von Pos.1 in Textdatei schreiben
 s := A\_Volt.Text;
 WriteLn(Text\_Datei,s);

 //Start Positionierung 2
 Wait(9000);
 \_8132\_start\_a\_move( 0, 13000, 0, 2000, 0.3);

 // Ergebnis von Pos.2 in Textdatei schreiben
 s := A\_Volt.Text;
 WriteLn(Text\_Datei,s);

 // hier können weitere Positionierungs- und Speicherschritte folgen
 // oder du kannst auch eine Schleife machen

 // Und am Schluß: Datei wieder schließen
 CloseFile(Text\_Datei);

end;

Ganz alternativ könntest du auch eine TStringList anlegen, mit der Methode Add(s) jeweils die Meßergebnisse anfügen und bei passender Gelegenheit die ganze Liste mit der Methode SaveToFile abspeichern.

Grüße,
Jochen

PS: Bei Unklarheiten nachfragen!

Hi,

hab dir gerade oben geantwortet. Verwende WriteLn statt Write.

Grüße,

Jochen

VIELEN DANK :wink:

Hallo,

ein „flush“ direkt vor einem „closefile“ ist nicht notwendig, da das „closefile“ vor den schließen die Datei ohnehin aktualisiert (siehe Hilfe zu closefile).

Gruss, Niels

1 Like

Hallo Nils,

ein „flush“ direkt vor einem „closefile“ ist nicht notwendig,
da das „closefile“ vor den schließen die Datei ohnehin
aktualisiert (siehe Hilfe zu closefile).

Ich habe dies Beispiel aus der Delphi Hilfe kopiert, und da steht es halt drin …

Gruß
Manfred

Hallo,

Ich habe dies Beispiel aus der Delphi Hilfe kopiert, und da
steht es halt drin …

Bei mir (D7) steht zu closefile: „…Die F zugeordnete externe Datei wird vollständig aktualisiert und anschließend geschlossen…“.

Das Beispiel zu Flush soll wohl nur die Funktion an sich demonstrieren. Da am Ende des Beispiels die Datei nicht einfach offen gelassen werden kann, wird nach dem Flush eben noch ein CloseFile angehängt.

Gruß
Niels