Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Alle Variablennamen eines Records ausgeben?!


luckyluke84 - Mi 13.08.08 21:22
Titel: Alle Variablennamen eines Records ausgeben?!
Geht das überhaupt?

Delphi-Quelltext
1:
2:
3:
4:
type Person = Record
       Alter : Integer;
       Name  : String;
     end;

Ich würde eine Funktion schreiben, die mir die Variablennamen in eine Liste packt. Wenn das überhaupt geht.
Wenn es möglich wäre, sollte es auch möglich sein zu bestimmen ob die Variable eine Zahl oder eine Zeichenkette ist!?

Das übersteigt leider bei weitem meinen Können.
Habt ihr eine Idee wie man das Problem lösen könnte?

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt


Chryzler - Mi 13.08.08 21:25

Das geht nur wenn du deiner Funktion den Quelltext deines Records gibst, mit einer Instanz deines Rekords allein gehts nicht.


Dunkel - Mi 13.08.08 21:32

Hallo!

Wenn überhaupt, dann geht sowas nur mit der RTTI. Schau Dir mal das [http://www.blong.com/Conferences/BorConUK98/DelphiRTTI/CB140.htm] an.

Wofür benötigst Du das? Vielleicht gibt es ja eine bessere/einfachere Methode.


luckyluke84 - Mi 13.08.08 21:56

Die Internetadresse sieht vielversprechend aus. Danke !

Ich hab einen RECORD in meinen Programm... der ist ziemlich groß.
Ich möchte jetzt Daten aus meiner Datei einlesen.

Bsp der Datei


Wert.v1 = 8
Wert.Adresse = 'keine Angegabe'


Ich will immer nur ein Wert pro Zeile schreiben. Die Daten werden
eingelesen und sollen meinen RECORD im Programm verändern.
Der RECORD umfasst ca. 100 Werte teilweise mit Schachtelung

z.B. Wert.v1.info = 'Idee'


Dunkel - Mi 13.08.08 22:10

Ich hab's eben mal ausprobiert. Da ich bisher noch nie was mit RTTI gemacht habe, sollte mein "Nein, das wird wohl nicht ohne weiteres gehen" lieber nochmal von einem "Fachkundigen" bestätigt werden.

Aus Aufzählungstypen a la type myEnum =(enum1, enum2, enum3); lassen sich ohne weiteres die Strings der einzelnen Aufzählungen extrahieren, bei Records nicht.


Edit:
Das [http://wwwswt.informatik.uni-rostock.de/deutsch/Mitarbeiter/michael/lehre/Delphi_WS2000/rtti.pdf] schaut auch sehr interessant aus. Anscheinend kann man Public-Properties aus Klassen auslesen. Wie wäre es, wenn Du OOP-konform aus Deinem Record eine kleine Klasse machst, dann sollte Dein Vorhaben machbar sein, würde ich sagen.


BenBE - Do 14.08.08 13:18

1. Es gibt keine (offiziellen*) RTTI für Records
2. RTTI gibt's nur für published-Properties, nicht für public-Properties!
3. Wenn es geht, arbeite OHNE RTTI

*Bei einigen Strukturen wie Arrays von Records gibt es intern Zeiger auf RTTI die den Record beschreiben. An diese kommt man aber mit offiziellen Mitteln von Delphi nicht ran ...