Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi File of record speichern (https://www.delphipraxis.net/79559-file-record-speichern.html)

TH3LL 24. Okt 2006 19:29


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:
  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;
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.
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?

mkinzler 24. Okt 2006 19:36

Re: File of record speichern
 
AssignFile, Reset, Write

HalloDu 24. Okt 2006 19:41

Re: File of record speichern
 
Es müsste eigentlcih wie mit einem ganz normalen Textfile gehen also erst
Delphi-Quellcode:
AssignFile(F, SaveDialog1.FileName)
um der Dateivariable einen Pfad zu geben, dann
Delphi-Quellcode:
Rewrite(F, SaveDialog1.FileName)
um eine neue Datei zu erstellen oder eine bestehende zu leeren, dann
Delphi-Quellcode:
Write(F, AlleMesswerte[x]) // In der For-Schleife
um die einzellnen Records in die Datei zu schreiben, und am Ende nicht das
Delphi-Quellcode:
CloseFile(F)
vergessen um die Datei abzuschließen.

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*

TH3LL 24. Okt 2006 21:32

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:

Hobby-Programmierer 24. Okt 2006 22:21

Re: File of record speichern
 
Nabend ...,
gutes Tutorial über typisierte Dateien.

Sunlight7 24. Okt 2006 23:27

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;

3_of_8 24. Okt 2006 23:32

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 Delphi-Referenz durchsuchenTFileStream.

turboPASCAL 25. Okt 2006 07:42

Re: File of record speichern
 
Ergänzend: Fehlerabfragen nicht Vergessen.

Delphi-Quellcode:
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;
... und ich würde mich mit der VCL auch für FileStreams entscheiden, ist irgendwie einfacher. ;)

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;

KeMa 27. Okt 2006 12:08

Re: File of record speichern
 
Hallo zusammen,

kann mir auch jemand sagen wie ich dieses Format speichern und öffnen kann?

Delphi-Quellcode:
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;
:gruebel: Isch werd noch amol blöd mit Ding hier...

[edit=alcaeus]Delphi-Tags eingefuegt. Mfg, alcaeus[/edit]

Mavarik 27. Okt 2006 12:46

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr.
Seite 1 von 2  1 2      

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