Entwickler-Ecke
Dateizugriff - "Altes" Array in "Neues" (erweitertes) Array laden
Crowbar - Sa 10.11.07 19:45
Titel: "Altes" Array in "Neues" (erweitertes) Array laden
Hallo,
ich habe ein Array und Lade/Speicher dieses über TFileStream in eine bzw. aus einer Datei. Alles Ok!
So, nun habe ich aber mein Array erweitert.
Um es aber kompatible mit den "alten" abgespeicherten Dateien zu halten und um keinen Fehler bzw. "Überladungen" beim Laden der Array-Felder in das "erweiterte" Array zu erhalten, muss ich irgendwie Abfragen, wieviele Felder es im Array gibt. Also, in meinem Beispiel, ob es 2 oder 3 Felder gibt.
Nur wie?
"Alter" Record:
Delphi-Quelltext
1: 2: 3: 4:
| TTestRecord = Record Name, Einheit : String; end; |
"Neuer" (erweiterter) Record:
Delphi-Quelltext
1: 2: 3: 4: 5:
| TTestRecord = Record Name, Nummer, Einheit : String; end; |
Gruß
Crowbar
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
BenBE - Sa 10.11.07 21:29
Records und Arrays sind was Grundverschiedenes ;-)
Im Grunde aber einfach Feldweise kopieren ...
dummzeuch - Sa 10.11.07 23:11
Titel: Re: "Altes" Array in "Neues" (erweitertes) Array laden
Crowbar hat folgendes geschrieben: |
ich habe ein Array und Lade/Speicher dieses über TFileStream in eine bzw. aus einer Datei. Alles Ok!
So, nun habe ich aber mein Array erweitert.
Um es aber kompatible mit den "alten" abgespeicherten Dateien zu halten und um keinen Fehler bzw. "Überladungen" beim Laden der Array-Felder in das "erweiterte" Array zu erhalten, muss ich irgendwie Abfragen, wieviele Felder es im Array gibt. Also, in meinem Beispiel, ob es 2 oder 3 Felder gibt.
Nur wie?
"Alter" Record:
Quelltext 1: 2: 3: 4:
| TTestRecord = Record Name, Einheit : String; end; |
"Neuer" (erweiterter) Record:
Quelltext 1: 2: 3: 4: 5:
| TTestRecord = Record Name, Nummer, Einheit : String; end; | |
Die Groesse eines Records (in Bytes) bekommst Du mit SizeOf. Allerdings hilft Dir das nicht viel, wenn Du feststellen willst, ob eine Datei die alten oder die neuen Records enthaelt, denn es gibt ja immer das KGV (Hey, wer haette gedacht, dass man Grundschulkenntnisse bei der Programmierung gebrauchen kann? ;-) ) aus den beiden.
Normalerweise macht man das dann so, dass man der neuen Datei einen Header verpasst, in dem eine Versionsnummer drinsteht und evtl. die Groesse der darin gespeicherten Records. Dann kann man spaeter immer feststellen, welchen Recordtyp man darin abgespeichert hat. Um ganz sicher zu gehen, kann man dem Header noch eine "Magische Zahl" voranstellen, von der man sicher ist, dass sie in der Datei ohne Header (also der alten) nicht am Anfang stehen kann.
Hilft das?
twm
Crowbar - So 11.11.07 13:54
@BenBE: Du hast Recht. :wink:
Ich verwende den Record als "Array". Das habe ich in meinem ersten Posting vergessen zu schreiben. :roll:
Delphi-Quelltext
1:
| TTestArray = Array of TTestRecord; |
@dummzeuch:
An die "Versionsnummer" im Datei-Header habe ich auch schon gedacht. ... nur für die "alten" Dateien ist es zu spät.
Aber
dummzeuch hat folgendes geschrieben: |
... Um ganz sicher zu gehen, kann man dem Header noch eine "Magische Zahl" voranstellen, von der man sicher ist, dass sie in der Datei ohne Header (also der alten) nicht am Anfang stehen kann. |
ist ein guter Ansatz für mich.
Vielen Dank!
Gruß Crowbar
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!