AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Record mit class operator als verknüpften String ausgeben

Record mit class operator als verknüpften String ausgeben

Ein Thema von Benutzername · begonnen am 2. Nov 2009 · letzter Beitrag vom 2. Nov 2009
Antwort Antwort
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
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#2

Re: Record mit class operator als verknüpften String ausgebe

  Alt 2. Nov 2009, 13:27
Versuchs mal hiermit:

Delphi-Quellcode:
class operator TPosition.implicit(aValue: TPosition): string;
var
  s1, s2, s3: string;
begin
  s1 := aValue.K1;
  s2 := aValue.K2;
  s3 := aValue.K3;
  Result:= s1 + ';' + s2 + ';' + s3;
end;
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzername

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

Re: Record mit class operator als verknüpften String ausgebe

  Alt 2. Nov 2009, 14:23
so gehts natürlich auch

vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#4

Re: Record mit class operator als verknüpften String ausgebe

  Alt 2. Nov 2009, 14:38
Zitat:
aValue.K1 + ';'
du müßtest wohl einfach nur verschiedene .Add erstellen ... jeweils für:
TPosition + String = String
String + TPosition = String
TPosition + TPosition = String

PS: wenn du dir noch ein 2D-TKoordinate mit 2 TPosition drinnen erstellst
und dann
TPosition + TPosition = 2D-TKoordinate
2D-TKoordinate + TPosition = TKoordinate

dann könnte man vermutlich auch sowas machen
TPosition + TPosition + TPosition = TKoordinate
würde intern ja dann so abgehandelt
2D-TKoordinate(TPosition + TPosition) + TPosition = TKoordinate
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Record mit class operator als verknüpften String ausgebe

  Alt 2. Nov 2009, 19:05
Ich halte es nicht für geschickt, eine implizite Konversion von deinem Record zu einem String zu definieren. Eine implizite Umwandlung sollte die Bedeutung des Wertes erhalten; zum Beispiel ist eine implizite Konversion von Real zu Complex sinnvoll. Ich würde daher in deinem Beispiel eher eine Methode ToString einführen. Letztlich ist das aber natürlich deine Entscheidung.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz