Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Variablename --> string


kingsize61 - Mo 11.08.03 10:22
Titel: Variablename --> string
Hallo,

gibt es eine Funktion oder Eigenschaft wie ich einen Variablenname in einen string bekommen kann?

z.B.

Delphi-Quelltext
1:
2:
3:
4:
5:
var myint: integer;  s: string;

...
...
  s:='myint'



Schon mal Danke im voraus.

Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt und BBCode aktiviert.


AndyB - Mo 11.08.03 10:32

Nur indem du ihn als selbstgeschriebenen String zuweist.

Delphi hat keinen Preprozessor wie C/C++ ihn haben. Bei diesen könntest du so vorgehen:

Quelltext
1:
2:
3:
4:
#define MAKESTR(__x) ##x

int myvar;
char *s = MAKESTR(myvar);


Wobei das auch wieder mehr Schreibarbeit als ein einfaches
s := 'myvar' ist.


Terra23 - Mo 11.08.03 13:23

Mag ja sein, daß ich mich irre, aber sein geposteter Code läßt auch irgendwie vermuten, daß er einfach nur den Integer in ein String wandeln will, oder? :roll:


maxk - Mo 11.08.03 21:18

Terra23 hat folgendes geschrieben:
Mag ja sein, daß ich mich irre, aber sein geposteter Code läßt auch irgendwie vermuten, daß er einfach nur den Integer in ein String wandeln will, oder? :roll:
Wenn dem so sei:s:=IntToStr(myint);


kingsize61 - Di 12.08.03 08:56

Hallo,

ein integer wollte ich nicht in einen string wandeln.
Ich möchte zum einen ganz normal mit variablen arbeiten, (integer und realzahlen) und zum anderen mit den variablennamen eine weitere Referenz herstellen.
Als Beispiel: Ich habe eine integer variable die da heisst: iWelt: integer;
Zu dieser variable brauche ich nicht nur den Wert selber, sondern den Namen als string, 'iWelt'.

Ich denke die erste Antwort kommt der Sache schon näher.

Der compiler speichert ja ne menge information zu jeder variablen., wie namen, länge, typ u.s.w. Nur an den namen müsste ich dran kommen.

Viele Grüße, Siggi


Tryer - Di 12.08.03 09:22

kingsize61 hat folgendes geschrieben:
Der compiler speichert ja ne menge information zu jeder variablen., wie namen, länge, typ u.s.w. Nur an den namen müsste ich dran kommen.


An den Namen der Instanz, also iWelt kommst du so nicht, nur an die Daten des Typ´s Integer.

Es gibt aber ein Workaround um solche Beziehungen herzustellen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
uses ..., TypInfo;
type 
  TMyVars = (iWelt, iStadt, iLand, iFluss);  // ordinalen Typ erstellen mit den gewünsachten Bezeichnern
  TMyVarValues = Array [TMyVars] of Integer; // Feld erstellen um Werte aufnehmen zu können
...
var
  s : String;
  i: Integer;
  iMyVar: TMyVars;
  iMyVarOrd :Integer;
  MyVarValues: TMyVarValues;
begin
  iMyVar := iWelt;
  MyVarValues[iMyVar] := i;  // Wert setzen

  s := GetEnumName(TypeInfo(TMyVars), Ord(iMyVar));  // Namen zurückbekommen

  s := 'iFluss';
  iMyVarOrd := GetEnumValue(TypeInfo(TMyVars), s); //Aufzählungs-Wert aus Namen
  iMyVar := TMyVars(iMyVarOrd);  // ordinalem Wert -> TMyVar-Wert
  i := MyVarValues[iMyVar];  // "Variablen-Wert" auslesen
end;

Das GetEnumValue und GetEnumName liesse sich auch in Funktionen packen, dann fällt viel Ballast weg.
Auf diese Art kannst Du beliebig zwischen Wert, Name und Aufzählungstyp switchen.

MfG,
Tryer