![]() |
File of record speichern
Hi ;)
Ich erstelle in Delphi eine file of record, um Messdaten zu speichern. Die datei soll während des Programms erstellt werden. Sieht wiefolgt aus:
Delphi-Quellcode:
Nun.. Ich habe lange gesucht, aber keine möglichkeit gefunden meine "File of TMesswert" zu speichern^^ Ist in der Delphi-Hilfe zu den Standard I/O-Befehlen von files nicht vorhanden.
type TMesswert=record
Amp1,Amp2:real; Vol1,Vol2:real; end; var AlleMesswerte:array of TMesswert; //.... procedure TForm1.Button4Click(Sender: TObject); var f:file of TMesswert; x:integer; begin If savedialog1.Execute then Begin For x:= 0 to High(AlleMesswerte) do Write(f,AlleMesswerte[x]); //Hier soll f nun in Savedialog1.Filename gespeichert werden end; end; Muss ich die Datei vielleicht vorher erstellen? Wenn es den Befehl tatsächlich nicht gibt, schätze ich mal ich muss der file f einen bestimmten Pfad oder eine datei zuweisen, aber wie tue ich dies? |
Re: File of record speichern
AssignFile, Reset, Write
|
Re: File of record speichern
Es müsste eigentlcih wie mit einem ganz normalen Textfile gehen also erst
Delphi-Quellcode:
um der Dateivariable einen Pfad zu geben, dann
AssignFile(F, SaveDialog1.FileName)
Delphi-Quellcode:
um eine neue Datei zu erstellen oder eine bestehende zu leeren, dann
Rewrite(F, SaveDialog1.FileName)
Delphi-Quellcode:
um die einzellnen Records in die Datei zu schreiben, und am Ende nicht das
Write(F, AlleMesswerte[x]) // In der For-Schleife
Delphi-Quellcode:
vergessen um die Datei abzuschließen.
CloseFile(F)
Hab mal gelesen, dass das so funktioniert. Und hoffe das es richtig ist, hoffe es hilft ihr :mrgreen: Edit: Ich glaube man braucht nur Write *g* |
Re: File of record speichern
Autsch .. natürlich...
Rewrite muss es heissen, nicht Reset^^ Hatte zuerst reset da stehn und mich gewundert warums abbricht, aber die Datei ist ja noch nicht erstellt :D Lange her dass ich Pascal geschrieben hab ;) Ok danke ^^ Es geht :zwinker: |
Re: File of record speichern
|
Re: File of record speichern
Abgesehen davon, das der Typ Real Out ist, wäre es zu empfehlen, ein Packed Record zu verwenden.
Sonst kann's mal mit dem Compilerschalter {$A+} etwas weh tun. :zwinker:
Delphi-Quellcode:
type TMesswert=PACKED record
Amp1,Amp2:real; Vol1,Vol2:real; end; |
Re: File of record speichern
Wenn du vor hast, mehrere verschiedene Arten von records in eine Datei zu speichern (kommt vor), dann empfehle ich einen
![]() |
Re: File of record speichern
Ergänzend: Fehlerabfragen nicht Vergessen.
Delphi-Quellcode:
... und ich würde mich mit der VCL auch für FileStreams entscheiden, ist irgendwie einfacher. ;)
procedure TForm1.Button4Click(Sender: TObject);
var f: file of TMesswert; x, IOErr: integer; begin If SaveDialog1.Execute then begin AssignFile(F, SaveDialog1.FileName); {$I-} Rewrite(F); // Datei neu Erstellen IOErr := IOResult; if IOErr = 0 then begin For x:= 0 to High(AlleMesswerte) do Write(f, AlleMesswerte[x]); CloseFile(F); end else Showmessage('Fehler bei Dateizugriff. #' + IntToStr(IOErr) ); {$I+} end; end;
Delphi-Quellcode:
procedure TForm1.Button4aClick(Sender: TObject);
var fs: TFileStream; x: integer; begin If SaveDialog1.Execute then begin fs := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmOpenWrite); try fs.Seek(soFromBeginning, 0); For x:= 0 to High(AlleMesswerte) do fs.Write(AlleMesswerte[x], sizeof(TMesswert)); finally fs.Free; end; end; end; |
Re: File of record speichern
Hallo zusammen,
kann mir auch jemand sagen wie ich dieses Format speichern und öffnen kann?
Delphi-Quellcode:
:gruebel: Isch werd noch amol blöd mit Ding hier...
Type TField = record
Field : array of String [50] end; Type TDatSet = record DatSet : array of TField; DatExt : array of TField; DSFLength : Longword; DEFLength : Longword; DSLength : Longword; Name : String [20]; Date : String [10]; end; Type TDBFrame = record Data : array of TDatSet; System : array of TDatSet; DatLength : Longword; SysLength : Longword; Name : String[20]; end; Var DBFrame : TDBFrame; [edit=alcaeus]Delphi-Tags eingefuegt. Mfg, alcaeus[/edit] |
Re: File of record speichern
Naja Hierbei handelt es sich nicht um klassisches Record speichern...
Jeder Record, der eine dynimische Variable hat, muss natürlich einzeln behandelt werden. Frank :coder: |
Re: File of record speichern
Hmm.. ich speichere auch einen Record der ein dynamisches array eines weiteren records beinhaltet...
Wenn ich versuche das herkömmlich zu speichern sind in der datei nur 2 bytes.. Muss ich das alles einzeln abspeichern? |
Re: File of record speichern
Zitat:
|
Re: File of record speichern
Ein record, hat feste Datensätze und Datenlängen.
Von einem dynamischen Array werden wohl nur die Adressen gespeichert. Und die sind wenn Du sie wieder einließt recht wenig wert. Auf eine feste Datensatzstruktur, magst DU dich nicht festlegen? Grüße Klaus |
Re: File of record speichern
Zitat:
Beim Auslesen musst Du genau das gleiche machen. Nur musst Du wissen wieviel Records von TField kommen. Dir Information ist bestimmt irgendwo gespeichert. Deshalb musst Du mit den Felder experimentieren, die Length enthalten. Darin ist bestimmt die Anzahl der Records in DatSet und so gespeichert. [edit=alcaeus]Delphi-Tags im zitierten Beitrag eingefuegt. Mfg, alcaeus[/edit] |
Re: File of record speichern
Ich habs so gelöst, dass ich Die Datei in der gespeichert werden soll manuell zusammenstelle. Also zuerst die Fixen datenwerte nach der Reihe, und am Ende eine beliebig Lange Liste eines Arrays an Datensätzen. Vor jedem dieser Arrays dann natürlich eine Angabe, wieviele Werte ausgelesen werden sollen.
Aber mir ist aufgefallen, das funktioniert nur mit einer file of "Recordtyp", wenn du nur Daten des Typs "Recordtyp" hast. Denn eine datei die ich als File of Real beschreibe, und dann um einen String hinzuzufügen als file of string öffne enthält nurnoch kauderwelsch. Gibt es vielleicht eine praktischere Lösung verschiedene Datentypen in einer Datei abzuspeichern, als alles durch den gleichen Typ (in dem Falle string) auszudrücken? |
Re: File of record speichern
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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