Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 8. Jun 2002, 14:43
Moin Ernie,

also das mit dem packed war die "Macht der Gewohnheit". Meist benutze ich Records für Dateien, und da macht das schon Sinn, um Lücken zwischen den einzelnen Datenfeldern zu vermeiden.
In Deinem Falle wirst Du wohl darauf verzichten können. Wie Du schon so richtig bemerkt hast drückt das auf die Performance.

Nun zum eigentlichen Problem:
Ist schon richtig, zum Speichern/Auslesen musst Du entscheiden, ob es sich nun um einen numerischen Wert handelt oder nicht.
Der Vorteil ist halt, dass Du nur einmal Speicher belegen musst, und ihn, je nach Art des Datums anders interpretieren kannst.

Code:
type
  TMyVariantRecord =
    record
      fNumeric : Boolean;
      case Boolean of
        false :
          (sContent : string[SizeOf(Extended)]);
        true :
          (exContent : extended);
    end;

var
  vr : TMyVariantRecord;

begin
  // speichern
  vr.fNumeric := true;
  try
    vr.exContent := StrToFloat(Edit1.Text);
  except
    vr.fNumeric := false;
    vr.sContent  := Edit1.Text;
  end;
  // auslesen
  if vr.fNumeric then
  begin
    ShowMessage('Numerisch: '+FloatToStr(vr.exContent));
  end
  else
  begin
    ShowMessage('Text:'+vr.sContent);
  end;
end;
So ist es auch möglich ein array of TMyVariantRecord anzulegen, bei dem die numerischen und nicht numerischen Werte problemlos gemischt gespeichert werden können. Man braucht nur eine Variable, und kann anhand des Flag Feldes entscheiden, wie der Inhalt jeweils zu interpretieren ist.
Um das zu tun, was Deiner Vorstellung entspricht, müsstest Du wohl den Typ Variant nehmen. Dem kannst Du beliebig Werte unterschiedlicher Typen zuweisen.
Aber der ist so richtig langsam.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat