![]() |
Speichern/Laden mit "assignfile, readln, writeln,...&qu
Hi,
hab jetzt eine Weile im Forum gesucht und versucht mir die Befehle selbst zu erklären. Ich möchte einfach nur den Inhalt eines records in eine Datei speichern und wieder laden. Speichern klappt:
Delphi-Quellcode:
Aber wie kann ich diesen Inhalt nun wieder laden?
type
tDatenbank = record name: string [40]; end; //... var Form1: TForm1; datensatz: tDatenbank; Datei: file of tDatenbank; //... procedure TForm1.Button1Click(Sender: TObject); begin assignfile(Datei, 'D:\Datenbank'); rewrite(Datei); datensatz.vorname:= edit1.text; write(Datei, datensatz); closefile(Datei); end; Wollte es natürlich mit readln() machen, aber finde nicht was da genau rein soll :) Soweit hab ich es versucht:
Delphi-Quellcode:
Wie bekomme ich jetzt den vorher gespeicherten Namen sagen wir in edit1.text zurück?
assignfile(Datei,'D:\Datenbank');
reset(Datei); readln(Datei, ???); closefile(Datei); Vielen Dank schonmal fürs Lesen! MfG ErdNussLocke |
Re: Speichern/Laden mit "assignfile, readln, writeln,..
Der zweite Parameter dafür ist die Variable, in die das Gelesene reinsoll. Etwa so:
Delphi-Quellcode:
Eigentlich sind diese E/A-Funktionen veraltet und man sollte lieber TFileStream verwenden, aber funktionieren tun sie natürlich trotzdem.
var
f: file of TWuppdi; wuppdi: TWuppdi; begin //... ReadLn(f, wuppdi); //... end; |
Re: Speichern/Laden mit "assignfile, readln, writeln,..
Hi,
bei mir würde das ja dann so aussehen:
Delphi-Quellcode:
Aber dann kommt die Meldung das die Typen nicht kompatibel sind ("[Fehler] Unit1.pas(48 ): Inkompatibel Typen")
type
tDatenbank = record name: string [40]; end; //... var Form1: TForm1; datensatz: tDatenbank; Datei: file of tDatenbank; //... procedure TForm1.Button2Click(Sender: TObject); begin assignfile(Datei,'D:\Datenbank'); reset(Datei); readln(Datei, datensatz); closefile(Datei); end; ErdNussLocke PS: Gucke mir gleich mal TFileStream an, aber möchte es gern trotzdem wissen :) |
Re: Speichern/Laden mit "assignfile, readln, writeln,..
Hallo ErdNussLocke,
besser packed record verwenden, weil Delphi unter umständen leere Bytes einträgt um den Zugriff zu beschleunigen.
Delphi-Quellcode:
Beim Anlegen einer neuen Datei sollte man Fehler mit IOResult-Abfragen.
type
TDatenBank = packed record . Name: String; End; Die Comilerschalter {$-I} wird deaktiviert um einen Programmabsturz zu verhindern, wenn die Datei nicht angelegt werden kann, nach dem Anlegen wird er wieder eingestellt und mit IOResult ein vorhandener Fehler abgefragt.
Delphi-Quellcode:
Das gleiche muss auch beim Lesen gemacht werden.
procedure TForm1.Button1Click(Sender: TObject);
begin assignfile(Datei, 'D:\Datenbank'); {$I-}rewrite(Datei); {$I+} if IOResult <> 0 then ShowMessage(‘Neue Datei nicht angelegt’); datensatz.vorname:= edit1.text; write(Datei, datensatz); closefile(Datei); end;
Delphi-Quellcode:
Bis bald Chemiker
assignfile(Datei,'D:\Datenbank');
{I-}reset(Datei); {I+} if IOResult <> 0 then ShowMessage(‘Vorhande Datei konnte nicht geöffnet werden’); // readln(Datei, ???); readln(Datei, datensatz); closefile(Datei); |
Re: Speichern/Laden mit "assignfile, readln, writeln,..
hm, kann das sein das datensatz Datenbank ist?
du musst writetodb oder so als string definieren und ihn nutzen. Oder vllt gibts die Funktion StrtoDb weiß nicht |
Re: Speichern/Laden mit "assignfile, readln, writeln,..
hmm, hab es genauso übernommen (Zeichen wie '' angepasst), trotzdem gleicher Fehler :(
Aber wenn diese Methode eh veraltet ist, versuche ich mich mal an TFileStream. Trotzdem vielen Dank für die Hilfe!! MfG ErdNussLocke |
Re: Speichern/Laden mit "assignfile, readln, writeln,..
Probier mal statt readln nur read - readln funktioniert nur mit Textdateien.
|
Re: Speichern/Laden mit "assignfile, readln, writeln,..
yaaa :) Immer diese doofen Kleinigkeiten...
Vielen Dank!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 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