Entwickler-Ecke
Dateizugriff - in Datei mehrere versch. Record Typen speichern
Dede - Sa 04.09.04 16:18
Titel: in Datei mehrere versch. Record Typen speichern
Mein Problem ist derzeit das ich mehrere Daten von versch. Record Typen habe. Die würde ich nämlich gerne zusammen in einer Datei speichern.
Eine Sache hab ich schon ausprobiert hatte allerdings nicht den nötigen Erfolg.
Ich habe mir einen Header definiert, der angibt, wieviele Datensätze von den versch. Record Typen in der Datei sind. Im Prinzip so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| tHeader = record AnzahlDatensätzevonRecord1 : Integer; AnzahlDatenSätzevonRecord2 : Integer; end; tHeaderFile = file of tHeader;
tRecordItem1 = record ... //Hier halt die Definition end; tRecordArrItem1 = array of tRecordItem1; tRecordItem1File = file of tRecordItem1;
// Die Definition von tRecordArrItem2 ist ähnlich ... procedure SaveToFile (RecordArrItem1 : tRecordArrItem1; RecordArrItem2 : tRecordArrItem2, FileName : string); var HeaderFile : tHeaderFile Header : tHeader; RecordItem1File : tRecordItem1File; begin AssignFile(HeaderFile,FileName); Rewrite(HeaderFile); Header.AnzahlDatensätzevonRecord1 := Length(RecordArrItem1); Header.AnzahlDatensätzevonRecord2 := Length(RecordArrItem2); Write(HeaderFile,Header); CloseFile(HeaderFile);
AssignFile(RecordItem1File,FileName); Reset(SpellFile); // Hier das erste Problem, das Reset setzt FilePointer wieder zurück auf den Anfang :(
for i:= 0 to Length(RecordArrItem1)-1 do Write(RecordItem1File,RecordArrItem1); CloseFile(RecordItem1File);
// Hier würde nun das Item2 kommen... end; |
ich hoffe ich hab mich etwas verständlich ausgedrückt...
Gruß
Dede
Viper - Sa 04.09.04 17:18
Hallo Dede.
Ich würde das einfach über einen FileStream machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var i: integerM FileStr: TFileStream; begin FileStr := TFileStream.Create('Dateiname', fmCreate); try FileStr.Write(AnzahlRecord1, SizeOf(Integer) ); for i := 0 to AnzahlRecord1 - 1 do FileStr.Write(DeinRecord1[i], SizeOf(TDeinRecord1) ); end; |
Ich habe jetzt einfach andere Variablennamen verwendet, trotzdem ist ja wohl klar was gemeint ist.
Beim Laden der Datei einfach:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| FileStr := TFileStream.Create('Dateiname', fmOpenRead); FileStr.Read(AnzahlRecord1, SizeOf(integer) ); setLength(DeinRecord1, AnzahlRecord1); for i := 0 to AnzahlRecord1 - 1 do Str.Read(DeinRecord1[i], SizeOf(TDeinRecord1) ); |
Dede - Sa 04.09.04 18:01
Hm... Da wäre ich jetzt selber wohl nicht drauf gekommen, werd ich nachher gleich mal ausprobieren.
Schonmal Vielen Dank
Gruß
Dede
Dede - Sa 04.09.04 19:10
Funktioniert wunderbar...
Dankeschön
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!