Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speichern/Laden mit "assignfile, readln, writeln,..." (https://www.delphipraxis.net/120290-speichern-laden-mit-assignfile-readln-writeln.html)

ErdNussLocke 8. Sep 2008 19:36


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:
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;
Aber wie kann ich diesen Inhalt nun wieder laden?
Wollte es natürlich mit readln() machen, aber finde nicht was da genau rein soll :)
Soweit hab ich es versucht:

Delphi-Quellcode:
  assignfile(Datei,'D:\Datenbank');
   reset(Datei);
   readln(Datei, ???);
  closefile(Datei);
Wie bekomme ich jetzt den vorher gespeicherten Namen sagen wir in edit1.text zurück?

Vielen Dank schonmal fürs Lesen!

MfG
ErdNussLocke

3_of_8 8. Sep 2008 19:48

Re: Speichern/Laden mit "assignfile, readln, writeln,..
 
Der zweite Parameter dafür ist die Variable, in die das Gelesene reinsoll. Etwa so:

Delphi-Quellcode:
var
  f: file of TWuppdi;
  wuppdi: TWuppdi;
begin
  //...
  ReadLn(f, wuppdi);
  //...
end;
Eigentlich sind diese E/A-Funktionen veraltet und man sollte lieber TFileStream verwenden, aber funktionieren tun sie natürlich trotzdem.

ErdNussLocke 8. Sep 2008 20:02

Re: Speichern/Laden mit "assignfile, readln, writeln,..
 
Hi,

bei mir würde das ja dann so aussehen:

Delphi-Quellcode:
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;
Aber dann kommt die Meldung das die Typen nicht kompatibel sind ("[Fehler] Unit1.pas(48 ): Inkompatibel Typen")

ErdNussLocke

PS: Gucke mir gleich mal TFileStream an, aber möchte es gern trotzdem wissen :)

Chemiker 8. Sep 2008 20:20

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:
type
  TDatenBank = packed record                                                        .  
        Name: String;
  End;
Beim Anlegen einer neuen Datei sollte man Fehler mit IOResult-Abfragen.
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:
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;
Das gleiche muss auch beim Lesen gemacht werden.

Delphi-Quellcode:
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);
Bis bald Chemiker

Berlinermauer 8. Sep 2008 20:21

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

ErdNussLocke 8. Sep 2008 20:32

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

3_of_8 8. Sep 2008 20:34

Re: Speichern/Laden mit "assignfile, readln, writeln,..
 
Probier mal statt readln nur read - readln funktioniert nur mit Textdateien.

ErdNussLocke 8. Sep 2008 20:44

Re: Speichern/Laden mit "assignfile, readln, writeln,..
 
yaaa :) Immer diese doofen Kleinigkeiten...

Vielen Dank!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz