records in datei speichern

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
saxoBeat
Beiträge: 5
Registriert: Do 3. Mai 2012, 18:15

records in datei speichern

Beitrag von saxoBeat »

Hallo,

ich lerne zur Zeit wieder alles neu nach einer Krankheit und wäre echt dankbar wenn mir der ein oder andere dabei unter die Arme greifen würde.

Angefangen habe ich mit dem Speichern von Records in einer Datei, wo ich allerdings merkwürdige Ergebnisse erziele:

Code: Alles auswählen

[...]
type
  TPeople = record
    name : string[30];
    bem  : string[30];
  end;
 
var
  People    : TPeople;
  Datei     : File of TPeople;                                     
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  People.name:=Edit1.text;
  People.bem:=Edit2.text;
  AssignFile(Datei, 'daten.dat');
  Reset(Datei);
  Seek(Datei,FileSize('daten.dat'));
  write(datei,People);
  CloseFile(Datei);
end;
Denn nach dem zweiten, dritten und vierten Speichern steigt die Größe von DATEN.DAT expontentiell an.
Woran könnte das liegen?

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: records in datei speichern

Beitrag von Heinrich Wolf »

Hallo,

versuch's mal mit

Code: Alles auswählen

Seek(Datei,FileSize(Datei));
an Stelle von

Code: Alles auswählen

Seek(Datei,FileSize('daten.dat'));
FileSize scheint überladen zu sein. Auf einen Dateinamen angewendet scheint es die Größe in Bytes zurückzugeben. Auf eine typisierte Datei angewendet scheint es die Anzahl der Records zurückzugeben.

Heiner

saxoBeat
Beiträge: 5
Registriert: Do 3. Mai 2012, 18:15

Re: records in datei speichern

Beitrag von saxoBeat »

Hallo,

Dein Vorschlag führt bei mir zu folgender Fehlermeldung:
mainunit.pas(53,28) Error: Incompatible type for arg no. 1: Got "File Of TPeople", expected "AnsiString"
unixfileutil.inc(110,10) Hint: Found declaration: FileSize(const AnsiString):Int64;
mainunit.pas(73) Fatal: There were 1 errors compiling module, stopping

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: records in datei speichern

Beitrag von Heinrich Wolf »

saxoBeat hat geschrieben:Hallo,

Dein Vorschlag führt bei mir zu folgender Fehlermeldung:
mainunit.pas(53,28) Error: Incompatible type for arg no. 1: Got "File Of TPeople", expected "AnsiString"
unixfileutil.inc(110,10) Hint: Found declaration: FileSize(const AnsiString):Int64;
mainunit.pas(73) Fatal: There were 1 errors compiling module, stopping
Nanu?
http://lazarus-ccr.sourceforge.net/docs ... esize.html
Versuch's mal mit

Code: Alles auswählen

uses
  ...
  System,
  ...
... System.FileSize(Datei) ...
Wenn das nicht geht, gibt's noch die Möglichkeit

Code: Alles auswählen

FileSize('daten.dat') div SizeOf(TPeople)

saxoBeat
Beiträge: 5
Registriert: Do 3. Mai 2012, 18:15

gelöst: records in datei speichern

Beitrag von saxoBeat »

Hallo,

Code: Alles auswählen

... System.FileSize(Datei) ...
Das wars. Vielen Dank! :D

Antworten