AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Speichern/Laden mit "assignfile, readln, writeln,..."
Thema durchsuchen
Ansicht
Themen-Optionen

Speichern/Laden mit "assignfile, readln, writeln,..."

Ein Thema von ErdNussLocke · begonnen am 8. Sep 2008 · letzter Beitrag vom 8. Sep 2008
Antwort Antwort
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#1

Speichern/Laden mit "assignfile, readln, writeln,...&qu

  Alt 8. Sep 2008, 19:36
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 8. Sep 2008, 19:48
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#3

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

  Alt 8. Sep 2008, 20:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 8. Sep 2008, 20:20
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Berlinermauer

Registriert seit: 3. Okt 2007
Ort: 0x0000
213 Beiträge
 
Delphi 7 Personal
 
#5

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

  Alt 8. Sep 2008, 20:21
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
Marc S.
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#6

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

  Alt 8. Sep 2008, 20:32
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 8. Sep 2008, 20:34
Probier mal statt readln nur read - readln funktioniert nur mit Textdateien.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
ErdNussLocke

Registriert seit: 30. Jan 2006
104 Beiträge
 
#8

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

  Alt 8. Sep 2008, 20:44
yaaa Immer diese doofen Kleinigkeiten...

Vielen Dank!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 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