| Autor |
Beitrag |
jjturbo
      
Beiträge: 516
Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
|
Verfasst: Fr 03.07.09 09:46
Moin Forum,
kann man eine Variable anhand ihres Namens finden?
So nach dem Prinzip:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var Zaehler1 :Integer; Zaehler2 :Integer;
function FindeVariable:Integer; begin Result := MachIrgendwas('Zaehler' + IntToStr(1)); end; |
_________________ Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 03.07.09 10:03
Benutze ein Array:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var zahler : Array [1..2] of Integer;
begin Result := MachIrgendwas(Zaehler[1]);
end; |
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
jjturbo 
      
Beiträge: 516
Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
|
Verfasst: Fr 03.07.09 10:22
Nein nein, so war das nicht gemeint.
Ich möchte wirklich den NAMEN einer Variablen finden.
Hintergrund: In userem Projekt befinden sich ziemlich viele Konstanten
z.B.:
Delphi-Quelltext 1: 2:
| Merker_Roba_335A_Belegt = '493.5'; Merker_Roba_335A_Reset = '493.6'; |
Jetzt habe ich an einer Stelle im Programm nur die Info 335A zur Verfügung und möchte den entsprechenden String dazu finden.
Z.B. möchte ich abfragen ob die entsprechende Station belegt ist:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function FindeVariable(VariablenName:String):String; begin Result := MachIrgendwas(VariablenName); end;
procedure LosGehts; var s :String; begin s := FindeVariable('Merker_Roba_' + '335A' + '_Belegt'); Showmessage(s); end; |
Und den Wert '493.5' würde ich in diesem Beispiel als Rückgabewert haben wollen.
_________________ Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 03.07.09 10:45
Das geht so nicht. Die Namen der Konstanten sind in der Exe nicht mehr enthalten. Solche Informationen musst du zusätzlich über ein konstantes Array z.B. mitgeben und dieses durchschauen. Konstanten sind nur dafür da, dass man einen Wert nicht überall als Zahl schreiben muss. Der Compiler ersetzt die Konstante dann überall durch den Wert.
So geht es: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TMyRecord = record Name, Value: String; end;
const MyData: array[0..1] of TMyRecord = ( (Name: '335A_Belegt'; Value: '493.5'), (Name: '335A_Reset'; Value: '493.6') ); | Und jetzt musst du nur das Array durchgehen und wo MyData[i].Name den richtigen Wert hat, nimmst du MyData[i].Value.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 03.07.09 10:50
Dann benutz doch Arrays
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| const Merker_Roba_Namen : Array [0..1] of String = ('335A', '0815'); Merker_Roba_Belegt : Array [0..1] of Double = (493.5, 999.5);
Function GetIndexFromName(name : string) : Integer; var i : integer; begin result := -1;
i := low(Merker_Roba_Namen); while (i <= high(Merker_Roba_Namen)) and (Result < 0) do begin if Merker_Roba_Namen[i] = Name then result := i; inc(i); end;
end;
begin ShowMessage(FloattoStr(Merker_Roba_Belegt[GetIndexFromName('335A')])); end; |
Natürlich kann man die Suche optimieren und Errorhandling betreiben, aber es zeigt das Prinzip.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
jjturbo 
      
Beiträge: 516
Win2000 prof., WinXP prof.
D4 Stand., D5 Prof, D7 Prof, D2007 Prof.
|
Verfasst: Fr 03.07.09 10:52
Ok, danke für die Antwort.
_________________ Windows XP: Für die einen nur ein Betriebssystem - für die anderen der längste Virus der Welt...
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 03.07.09 14:36
Über das Compiler-Mapfile ginge es, das will man aber oftmals aus verschiedenen Gründen nicht herausgeben. Außerdem ist der Aufwand für das Parsing nicht zu vernachlässigen (Siehe OmMAP und Omorphia Debug Interface).
_________________ 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.
|
|
|