Einzelnen Beitrag anzeigen

Benutzername

Registriert seit: 18. Apr 2004
7 Beiträge
 
#1

Record mit class operator als verknüpften String ausgeben

  Alt 2. Nov 2009, 12:45
HiHo DP!

Ich habe eine Frage zu den class operators in Delphi.

Ich habe 2 Records die über den class operator 'implicit' die enthaltenen Variablen als Text ausgeben. Nun möchte ich diese Beiden Records aber in einem String zusammenführen was Delphi aber nicht mitmachen möchte.

Ich habe zwar eine Lösung, aber die ist etwas unschön. Hier mal eine Beispiel:

Ich brauche als String einen Satz aus 3 Koordinaten. Eine Koordinate besteht aus den 3 Dimensionen (x, y, z). Getrennt werden die Koordinaten mit einem ';' und die Dimensionen mit ':' so das folgendermaßen ausgegeben wird: '123:123:123;456:456:456;789:789:789'

Delphi-Quellcode:
  TKoordinate = record
    X: Extended;
    Y: Extended;
    Z: Extended;
    class operator implicit(aValue: TKoordinate): string;
  end;

  TPosition = record
    K1: TKoordinate;
    K2: TKoordinate;
    K3: TKoordinate;
    class operator implicit(aValue: TPosition): string;
  end;

class operator TKoordinate.implicit(aValue: TKoordinate): string;
begin
  Result:=
    FloatToStr(aValue.X) + ':' +
    FloatToStr(aValue.Y) + ':' +
    FloatToStr(aValue.Z);
end;

class operator TPosition.implicit(aValue: TPosition): string;
begin
  // funktioniert nicht: Delphi meldet das dieser operanden typ nicht anwendbar sei
  Result:=
    aValue.K1 + ';' +
    aValue.K2 + ';' +
    aValue.K3;
  // funktioniert, wäre aber unschön, da die ausgabe der Koordinate ja schon in TKoordinate gemacht werden kann
  Result:=
    FloatToStr(aValue.K1.X) + ':' +
    FloatToStr(aValue.K1.Y) + ':' +
    FloatToStr(aValue.K1.Z) + ';' +
    FloatToStr(aValue.K2.X) + ':' +
    FloatToStr(aValue.K2.Y) + ':' +
    FloatToStr(aValue.K2.Z) + ';' +
    FloatToStr(aValue.K3.X) + ':' +
    FloatToStr(aValue.K3.Y) + ':' +
    FloatToStr(aValue.K3.Z);
end;
Ich habe das ganze auch mit dem class operator 'add' probiert. Delphi meckert dann zwar nicht mehr, jedoch erhalte ich dann nur eine verkrüppelte ausgabe z.b. '123:123:123456:456:456' etc.

die strings mit 'concat' zusammenzufügen habe ich noch nicht probiert. in der delphi hilfe steht jedoch, das 'concat' wesentlich langsammer ist als '+'.

ich brauche auch definitiv beide records deklarationen, da ich auch mit TKoordinate einzeln arbeiten muss.

wäre schön wenn jemand eine lösung kennt. wenn nicht, auch nicht sooo schlimm

Danke schonmal

mfg euer Benutzername
  Mit Zitat antworten Zitat