Autor Beitrag
luckyluke84
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Mi 13.08.08 21:22 
Geht das überhaupt?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Mi 13.08.08 21:32 
Hallo!

Wenn überhaupt, dann geht sowas nur mit der RTTI. Schau Dir mal das an.

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

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: 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 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.

_________________
Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.