Delphi: Daten in Datei schreiben und lesen

Diskutiere Delphi: Daten in Datei schreiben und lesen im Developer Network Forum im Bereich Hardware & Software Forum; Hallo. Ich versuche in mein Prog zur Beschränkung der Laufzeit eine Funktion einzubauen, die beim erstmaligen Start eine Datei erzeugt in der...
  • Delphi: Daten in Datei schreiben und lesen Beitrag #1
K

kamino

Bekanntes Mitglied
Dabei seit
24.06.2001
Beiträge
1.967
Reaktionspunkte
0
Ort
Saarland - also nicht vom Ar*** der Welt
Hallo.

Ich versuche in mein Prog zur Beschränkung der Laufzeit eine Funktion einzubauen, die beim erstmaligen Start eine Datei erzeugt in der das Datum drinsteht. Die Datei zu erzeugen und beim Start abzufragen ob diese schon existiert ist kein Problem, nur das hineinschreiben ist das Problem. Und später auch das auslesen ohne das etwas verändert wird.

Kann mir da jemand ein paar nützliche Tipps geben?

Und wo wir schon dabei ind. Wie mache ich es am einfachsten, das auf das Datum z.B. 5 Tage aufgerechnet werden.
Also in etwa so das in der Datei das Datum: 03.10.2003 steht und das Programm dann auf dieses Datum 5 Tage aufgerechnet werden, und das Prog dann am 8.10.2003 den Dienst versagt.

Ich hoffe das war jetzt nicht zuviel. In der Zwischenzeit probiere ich noch ein wenig.

Nachtrag:
Aller guten Dinge sind drei. ;)
Wie geht es, das ich mit ´nem OpenDialog nur die Ordner aber nicht die darin enthaltenen Dateien auswählen kann?

So, würde sagen, das reicht mal für den Anfang. :)

cu
 
Zuletzt bearbeitet:
  • Delphi: Daten in Datei schreiben und lesen Beitrag #2
G

Gwandlaus

Aktives Mitglied
Dabei seit
26.02.2003
Beiträge
32
Reaktionspunkte
0
Hi,

zuerst zur Ordner-Auswahl: Vielleicht hilft Dir die Funktion
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean;
aus der Unit FileCtrl. (zumindest D7)
Wenn Du mehr willst, schau Dir mal in der PSDK die SHBrowseForFolder an.
(Diese Lösungen finde ich sinnvoller als den OpenDialog umzubauen)

Zum Datum: Diese Beschränkung kann dir so jeder aushebeln...
Wenn Du trotzdem willst, nimm eine Variable vom Typ TDateTime (ist ein Double) und schreib diesen in die Datei.
Tage sind ganze Zahlen, also einfach Wert:=Wert+5 und 5 Tage sind rum.

Lesen und Schreiben würd ich hier BlockRead und BlockWrite machen lassen.

Code:
var f : File;
  Zeit : TDateTime;

// schreiben
begin
  AssignFile(f, 'datum.dat');
  ReWrite(f, 1);
  try
    BlockWrite(f, Zeit, SizeOf(TDateTime));
  finally
    CloseFile(f);
  end;
end;

// lesen
begin
  AssignFile(f, 'datum.dat');
  Reset(f, 1);
  try
    BlockRead(f, Zeit, SizeOf(TDateTime));
  finally
    CloseFile(f);
  end;
end;

end;
 
  • Delphi: Daten in Datei schreiben und lesen Beitrag #3
R

Rambo2000

Bekanntes Mitglied
Dabei seit
17.03.2001
Beiträge
50
Reaktionspunkte
0
Guck mal in der Hilfe unter DateUtils. Da findest Du eine ganze Menge an nützliche Funktionen zur Datums- / Zeitberechnung.
 
  • Delphi: Daten in Datei schreiben und lesen Beitrag #4
S

Svenche

Bekanntes Mitglied
Dabei seit
30.04.1999
Beiträge
471
Reaktionspunkte
0
Ort
Erfurt, Deutschland
Zu den Teil mit den Tagen:

Wenn du den Wert des Datums als TDateTime in einer Variablen hast, addiere einfach die Tage als Ganzzahl dazu. Vor dem Komma sind nämlich die Tage, nach dem Komma die Zeit gespeichert.
 
  • Delphi: Daten in Datei schreiben und lesen Beitrag #5
K

kamino

Bekanntes Mitglied
Dabei seit
24.06.2001
Beiträge
1.967
Reaktionspunkte
0
Ort
Saarland - also nicht vom Ar*** der Welt
Jau, dank Euch.

Habs jetzt soweit hinbekommen.


Zum Datum: Diese Beschränkung kann dir so jeder aushebeln...

Ja, schon. Aber erstens ist es auch nur als kleiner Test, und zweitens dachte ich mir das ich die Datei in irgendeinem Unterverzeichniss erstelle wo sie sowieso keiner so einfach findet. Und natürlcih auch nicht unbedingt mit dem Namen Datum o.s.

Teste mal weiter.


mfg
 
  • Delphi: Daten in Datei schreiben und lesen Beitrag #6
K

kamino

Bekanntes Mitglied
Dabei seit
24.06.2001
Beiträge
1.967
Reaktionspunkte
0
Ort
Saarland - also nicht vom Ar*** der Welt
Hallo, ich mal wieder. :D

Bin dieses Thema mal wieder angeganen, jetzt aber nicht mehr mit Datum sondern mit Daten. (Edit, etc.)

Habe zum Testen eine Form erstelt mit 8 Edit´s und 2 Checkboxen.
Die Hälfte zum lesen und die anderen zu schreiben.

Das Schreiben klappt wunderbar, aber beim Lesen erscheint ´ne Fehlermeldung. Ohne Checkbox klappt auch dieses, aber sobald ich die Chekbox mit einbinde geht nix mehr.
Code:
[COLOR=Lime]Schreiben![/COLOR]
procedure TForm1.Button2Click(Sender: TObject);
var
 F: TextFile;
 S1, S2, S3, S4: String;
 S5: Boolean;
begin
 S1 := Edit1.Text;
 S2 := Edit2.Text;
 S3 := Edit3.Text;
 S4 := Edit4.Text;
 S5 := CheckBox1.Checked;
 AssignFile(F, 'E:\Dateien\Delphi_Test\testdatei.txt');
 rewrite(F);
 WriteLn(F, S1);
 WriteLn(F, S2);
 WriteLn(F, S3);
 WriteLn(F, S4);
 WriteLn(F, S5);
 CloseFile(F);
end;

[COLOR=Lime]Lesen![/COLOR]
procedure TForm1.Button3Click(Sender: TObject);
var
 F: TextFile;
 S1, S2, S3, S4: String;
 S5: Boolean;
begin
 AssignFile(F, 'E:\Dateien\Delphi_Test\testdatei.txt');
 Reset(F);
 ReadLn(F, S1);
 ReadLn(F, S2);
 ReadLn(F, S3);
 ReadLn(F, S4);
 ReadLn(F, S5);          [COLOR=Red]<---Hier erscheint die Meldung![/COLOR]
 Edit5.Text := S1;
 Edit6.Text := S2;
 Edit7.Text := S3;
 Edit8.Text := S4;
 CheckBox2.Checked := S5;
 CloseFile(F);
end;

Wenn ich das Programm starten will, erscheint folgende Meldung:

[Fehler] Unit1.pas(80): Ungültiger Typ in Read/Readln-Anweisung

Die CheckBox will ich um versch. Einstellungen zu speichern und beim Programmstart zu laden.

Weis jmd die Lösung zu meinem Problem?


BigTHX
 
  • Delphi: Daten in Datei schreiben und lesen Beitrag #7
S

Svenche

Bekanntes Mitglied
Dabei seit
30.04.1999
Beiträge
471
Reaktionspunkte
0
Ort
Erfurt, Deutschland
Der Fehler liegt daran, das ReadLn die Daten liest, bis es ein CHR(13) bzw CHR(10)+CHR(12) findet.

Da das in der letzten Zeile nicht der Fall ist, kommt es zur Kollision mit dem Zeilenende.

Davon ab, ist es nicht mehr ratsam, mit AssignFile zu arbeiten. Wenn du an der Stelle nicht mit IniFiles besser dran wärst, sondern mit Strings arbeiten willst, dann nutz doch StringList.



Code:
VAR
  TextDaten:TStringList;
BEGIN
  TextDaten:=TStringList.Create;
  TextDaten.Add(S1);
  TextDaten.Add(S2);
...
  TextDaten.SaveToFile(FileName);
 
...
  TextDaten.ReadFromFile(FileName);
  S1:=TextDaten[0];
  S2:=TextDaten[1];
...
  TextDaten.Free;
END;
Das hat zum einen den Vorteil, das es mit Streams arbeitet, die Delphi nativ besser & schneller unterstützt und du kannst keine Probleme mit neueren Windowsversionen bekommen. (AssignFile funktioniert z.B. unter Win2k/XP in manchen Fällen nicht und ist ohnehin nur zur Abwärtkompatibilität da.)
 
Thema:

Delphi: Daten in Datei schreiben und lesen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.180
Beiträge
1.579.174
Mitglieder
55.879
Neuestes Mitglied
stonetreck
Oben