Moin Pseudemys Nelsoni,
in diesem Thread
Double in zwei Integer
hatte ich mal ein Beispiel für die Anwendung von Varianten Records gepostet.
Der Platz, den der Variante Teil belegt, wird bestimmt von der grössten Teilvariante.
Folgenden (verfremdeter
) Ausschnitt aus einem meiner Programme benutze ich zum Lesen einer Datei
Delphi-Quellcode:
TcsD2S5CCPH =
packed record
dwMC : DWORD;
dwMB : DWORD;
dwSC : DWORD;
dwSB : DWORD;
dwCL : DWORD;
case byte
of
$3F : (dwCE_3F : DWORD;);
$5F : (dwGII_5F : DWORD;);
$7F : (dwCE_7F : DWORD;
dwGII_7F : DWORD;);
$9F : (dwGIS_9F : DWORD;);
$BF : (dwCE_BF : DWORD;
dwGIS_BF : DWORD;);
$
DF : (dwGII_DF : DWORD;
dwGIS_DF : DWORD;);
$FF : (dwCE_FF : DWORD;
dwGII_FF : DWORD;
dwGIS_FF : DWORD;);
end;
Der gesamte Record ist 32 Byte gross, da er sich aus 5 festen DWORD Werten und maximal 3 variablen (bei $FF) zusammensetzt.
In Abhängigkeit eines anderen Wertes aus der Datei haben die gelesenen Werte an der gleichen Stelle eine unterschiedliche Bedeutung (wie man eventuell an den Bezeichnern ablesen kann.
Im Wesentlichlichen dient also das erste Beispiel (im genannten Thread), der unterschiedlichen Interpretation von Werten, im zweiten dokumentatorischen Zwecken.
Wichtig: Auch die im zweiten gemachte Angabe der Case Label dient nur der Dokumentation. Ich hätte die auch einfach von 0 bis 6 durchnummerieren können, und statt "case byte of" wäre auch "case integer of". Damit es funktioniert muss nur ein Aufzählungstyp angegeben werden, der für die erforderliche Anzahl der zu unterscheidenden Fälle gross genug ist. Ich habe mich nur für Werte entschieden, die den möglichen Werten aus der Datei entspricht, damit das ganze übersichtlicher wird.