@Max you can use the TJvAppXMLFileStorage component from JEDI to serialize a record or array of records.
you can use a procedure called WriteBinary to store data and ReadBinary to read.
Unfortunately, there is not much documentation for this component, so here you have a very simple example for storing one record (for an array of records, you can easily change this source code).
Record structure
type MyRecord= record Field1 : Integer; Field2 : Double; Field3 : String[20]; Field4 : String[20]; end;
Save Record
Procedure SaveMyRecord(Rec : MyRecord); var MyStore: TJvAppXMLFileStorage; begin MyStore:= TJvAppXMLFileStorage.Create(nil); try MyStore.FileName:='C:\temp\record.xml';
this procedure creates an XML file like this, the data is encoded in hexadecimal format.
<?xml version="1.0" encoding="iso-8859-1"?> <Configuration> <Dummy>84030000000000003333333333331F400D737472696E6720746573742031000000000000000D737472696E672074657374203200000000000000000000000000</Dummy> </Configuration>
Read saved data
Procedure LoadMyRecord(var Rec : MyRecord); var MyStore: TJvAppXMLFileStorage; begin MyStore:= TJvAppXMLFileStorage.Create(nil); try MyStore.FileName:='C:\temp\record.xml';//point to the same file MyStore.Xml.LoadFromFile(MyStore.FileName); //load the file MyStore.ReadBinary('Dummy', @Rec,sizeof(Rec));//use the Dummy identifier and pass the record as an pointer finally MyStore.Free; end; end;
Check out this complete project (tested in Delphi 7)
program ProjectPersistRecord; {$APPTYPE CONSOLE} uses SysUtils, JvAppXMLStorage; type MyRecord= record Field1 : Integer; Field2 : Double; Field3 : String[20]; Field4 : String[20]; end; Procedure SaveMyRecord(Rec : MyRecord); var MyStore: TJvAppXMLFileStorage; begin MyStore:= TJvAppXMLFileStorage.Create(nil); try MyStore.FileName:='C:\temp\record.xml'; MyStore.WriteBinary('Dummy', @Rec,sizeof(Rec)); MyStore.Xml.SaveToFile(MyStore.FileName); finally MyStore.Free; end; end; Procedure LoadMyRecord(var Rec : MyRecord); var MyStore: TJvAppXMLFileStorage; begin MyStore:= TJvAppXMLFileStorage.Create(nil); try MyStore.FileName:='C:\temp\record.xml'; MyStore.Xml.LoadFromFile(MyStore.FileName); MyStore.ReadBinary('Dummy', @Rec,sizeof(Rec)); finally MyStore.Free; end; end; Var Rec : MyRecord; begin
Rruz
source share