![]() |
Packed Record schnell in Datei speichern
Ich hab z.B. folgenden Record:
Delphi-Quellcode:
Nachdem ich ihn gefüllt habe speicher ich ihn so ab:
Verwaltungsdatei_Header = packed record
aDatentraeger_Nummer: string[3]; // 1 xFuellzeichen1: string[3]; // 4 aBeraternummer: string[7]; // 7 aBeratername: string[9]; // 14 xRestart_Kennzeichen: Char; // 23 nAnzahl_Datendateien: string[5]; // 24 nLetzte_Datendateinummer: string[5]; // 29 xFuellzeichen2: string[95]; // 34 end;
Delphi-Quellcode:
Das ist jedoch sehr umständlich, da ich bei jedem record jedes einzelne Feld einzeln speichern muss. Wie kann ich das automatisieren???
procedure TFrmMain.Button1Click(Sender: TObject);
var ft : TFileStream; TF : TextFile; FileName:string; begin // Record mit daten füllen Fill_Verwaltungsdatei_Header; // Datei erstellen und öffnen FileName := Edit1.Text + '\EV01'; AssignFile(TF,FileName); Rewrite(TF); CloseFile(TF); // Daten aus dem Record in die Datei schreiben ft := TFileStream.Create(FileName,fmOpenWrite); try with Verwaltungsdatei_Header do begin ft.Write(aDatentraeger_Nummer[1],SizeOf(aDatentraeger_Nummer)-1); ft.Write(xFuellzeichen1[1],SizeOf(xFuellzeichen1)-1); ft.Write(aBeraternummer[1],SizeOf(aBeraternummer)-1); ft.Write(aBeratername[1],SizeOf(aBeratername)-1); ft.Write(xRestart_Kennzeichen,SizeOf(xRestart_Kennzeichen)); ft.Write(nAnzahl_Datendateien[1],SizeOf(nAnzahl_Datendateien)-1); ft.Write(nLetzte_Datendateinummer[1],SizeOf(nLetzte_Datendateinummer)-1); ft.Write(xFuellzeichen2[1],SizeOf(xFuellzeichen2)-1); end; finally ft.free; end; end; |
Re: Packed Record schnell in Datei speichern
gib mal in der ide "file" an und drück dann F1 und geh zur "Dateitypen Object Pascal Reference". Schau dir das an und vor allem das Konstrukt "file of ***"
|
Re: Packed Record schnell in Datei speichern
Warum schreibst du auch alles einzeln rein?
Delphi-Quellcode:
type
TFoo = record Name: String[25]; ID: Integer; end; procedure TForm1.Button1Click(Sender: TObject); var fs: TFileStream; Foo: TFoo; begin fs := TFileStream.Create('d:\test.dat', fmCreate); try Foo.Name := 'Müller'; Foo.ID := 666; fs.WriteBuffer(Foo, sizeof(TFoo)); finally FreeAndNil(fs); end; end; procedure TForm1.Button2Click(Sender: TObject); var fs: TFileStream; Foo: TFoo; begin fs := TFileStream.Create('d:\test.dat', fmOpenRead); try fs.ReadBuffer(Foo, sizeof(TFoo)); ShowMessage(Foo.Name+', '+IntToStr(Foo.ID)); finally FreeAndNil(fs); end; end; |
Re: Packed Record schnell in Datei speichern
Wenn ich das richtig verstehe:
Als TextFile abspeichern? |
Re: Packed Record schnell in Datei speichern
näää. entweder als stream (luckies idee) oder als "file of Verwaltungsdatei_Header" (meine idee)
|
Re: Packed Record schnell in Datei speichern
Wie "als TextFile" speichern? Ich schreibe genauso eine typisierte Datei wie du. Meine Datei sollte am Ende genauso aussehen, wie mit deiner Methode geschrieben.
|
Re: Packed Record schnell in Datei speichern
Liste der Anhänge anzeigen (Anzahl: 1)
Habs mal mit Luckies methode ausprobiert
Leider speichert der mir auch die Anzahl der Zeichen in der Stringkette. Das soll er aber nicht. Guckt euch mal die dateien mit nem hex-editor an. Da wird das verdeutlicht |
Re: Packed Record schnell in Datei speichern
Also, wenn du es als reine Textdatei haben willst, dann musst du es auch so schreiben oder deinen umständlichen Weg in Kauf nehmen. Ist es denn wichtig, dass man die datei auch mit einem Texteditor lesen und bearbeiten kann?
|
Re: Packed Record schnell in Datei speichern
nein, es sind keine textdateien, da auch steuerzeichen vorhanden sind
das mit dem record mach ich so. will halt den record komplett speichern (geht an sich auch ganz gut mit deiner methode) aber ich will die Position 0 (In dem die Länge steht) des Strings nicht mitspeichern. Wie mach ich das? |
Re: Packed Record schnell in Datei speichern
Zitat:
Diese Steuerzeichen stören doch überhaupt nicht. :gruebel: Jedenfalls ist diese Methode ein gesamtes Record zu speichern relativ einfach und sicher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 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