![]() |
Variable über zusammengesetzte Strings ansprechen
'loha Folks,
in einem Projekt befindet sich ein Unit in welchem ein Paar Konstanten definiert werden:
Delphi-Quellcode:
Gibt es eine möglichkeit diese nun ähnlich wie mit der FindComponent Routine zu suchen? Es ist nämlich so, dass der "Stamm" der Konstanten stets gleichbleibt und lediglich das Ende unterschiedlich ist. Desweiteren werden künftig immer mehr Konstanten mit demselben "Stamm" dazukommen und genau diese möchte ich "dynamisch" ansprechen können, wenn das geht, irgendwie -.-
const
HWV_DI = 'DI'; HWV_GPI = 'GPI'; Grüsse hirnstroem |
Re: Variable über zusammengesetzte Strings ansprechen
Ist mir nicht bekannt und kann mir auch nicht vorstellen dass das so funktioniert.
Ich würde mir ein konstantes Array definieren und dieses dann durchsuchen. Oder eine Client-Datenmenge, oder eine Klasse erstellen, ähnlich wie..
Delphi-Quellcode:
..dann eine TList und dort die ganzen Typen im initialization-Abschnitt der unit registrieren. Dann noch eine Funktion, die den gesuchten Typ aus der jeweils gewählten Datenmenge liefert, ähnlich wie..
TMyClass = class
VarName : string; VarValue: integer; end;
Delphi-Quellcode:
..und fertig. Der Ordnung halber bei Verwendung der Klasse+TList aber nicht vergessen, die Liste im finialization Abschnitt wieder zu freen. Aber viele Wege führen nach Rom...
function GetConst(const AName: string): string;
|
Re: Variable über zusammengesetzte Strings ansprechen
Wäre aber eine nette Funktion die man sich in Delphi durchaus wünschen würde, Variablen und Konstanten per String-Namen anzusprechen. Kann man das nicht irgendwo vorschlagen? Oder vielleicht liest das ja jemand mit nem guten Draht zu CodeGear :mrgreen:
|
Re: Variable über zusammengesetzte Strings ansprechen
Mach doch einfach ne Liste aus den Konstanten.
Code:
und dann such die Konstante in der Liste und hol den Wert raus.
const1=asdf;
const2=fdsa; ... |
Re: Variable über zusammengesetzte Strings ansprechen
Was haltet ihr von einer Stringlist (als Speicherung für die Variablen). Wenn man da mit Names und Values arbeitet, ist ein Zugriff über Strings möglich.
|
Re: Variable über zusammengesetzte Strings ansprechen
Das vorhaben ist nicht möglich da Variablennamen und Constantennamen in der kompilierten Exe/Dll etc. nicht mehr vorhanden sind.
Die gewünschte parallele zu FindComponent hingt auch. Denn FindComponent sucht nicht eine Variable mit einem bestimmtem Namen sondern geht alle Komponenten durch und vergleicht das Property "Name". Und zufällig ist dieses Property immer gleich mit dem Variablennamen aber eben auch nur so lange wie man die Komponenten per IDE auf das Form setzt. |
Re: Variable über zusammengesetzte Strings ansprechen
Stimmt, als echte Variablen geht es nicht, wie man auch sehr schön im Assemblercode sieht, wo dann nur noch Adressen auftauchen. Dennoch kann man das Verhalten von Findcomponent nachbilden, und da die Stinglist es unterstützt muss man nix mehr selber machen.
|
Re: Variable über zusammengesetzte Strings ansprechen
genau, das Verhalten von FindComponent kann man recht einfach nachbilden. Es muss eben einem nur bewusst sein das Variablennamen im compilat nicht mehr existent sind und man somit alle Namen als Daten hinterlegen muss (z.B.: in einer Stringlist)
|
Re: Variable über zusammengesetzte Strings ansprechen
Delphi-Quellcode:
TNamen = (Hans,Peter, Uwe, Otto);
Const AdresseVon : array[TNamen] of String = ('Wilhelmstrasse', 'Otterweg', 'Pupsweg', 'Blödweg'); Const Namen: array[TNamen] of String = ('Hans','Peter','Uwe','Otto'); Function FindConst(aString:tString):tname; var i:integer; gefunden:boolean; begin gefunden := false For i := integer(Hans) to integer(otto) do Begin if namen[tnamen(i)] = astring then Begin gefunden := true; result := tnamen(i); break; end; end; if not gefunden then Raise Exception.create('Dumme sache'); end; Sowas ungefähr könnte gehen |
Re: Variable über zusammengesetzte Strings ansprechen
Damit gewinnt man nichts, da man die Namen nicht wie gewünscht zusammensetzen kann.
|
Re: Variable über zusammengesetzte Strings ansprechen
hi,
ist vll ein doofer ansatz, aber zumindest habe ich das problem bei mir so gelöst: mach ein objekt, welches keine vars enthält und schreibe für die constanten ne kleine wrapper funktion dann packst du um alles properties... also
Delphi-Quellcode:
bzw. machst das gerade über ne getter setter funk (zuverlässiger)
property foobar : String read FFoobar write FFoobar
Delphi-Quellcode:
finden kannst du die dann per String! und das auch per laufzeit!
procedure setFoobar(const Value : String);
function getFoobar() : String;
Delphi-Quellcode:
must der funk den namen der procedure angeben und das Obj dem diese gehört...
function eval(methName : String; obj : TObject) : TMethod;
begin result.Data := obj; result.Code := obj.MethodAddress(methName); end; der einzige harken / knackpunkt: Die funktionen nutzt delphi normalerweise um den objektinspektor zu befüllen. Es geht nur wenn die properties / methoden published (public reicht nicht!) sind vll hilft das ja... cya Corelgott |
Re: Variable über zusammengesetzte Strings ansprechen
Zitat:
Delphi-Quellcode:
kann ich die Namen ja auch zusammensetzen...
myconst := FindConst('Ha' + 'ns');
|
Re: Variable über zusammengesetzte Strings ansprechen
Das geht? Ehrlich? Wieder mal was gelernt, ich wusste gar ncht, dass man sowas mit Aufzählungstypen machen kann.
|
Re: Variable über zusammengesetzte Strings ansprechen
Zitat:
|
Re: Variable über zusammengesetzte Strings ansprechen
:oops: Wer Augen hat zum sehen, der sehe!
|
Re: Variable über zusammengesetzte Strings ansprechen
Hallo,
ideal wäre hier wohl ein Hash, wie z.B. von Perl bekannt (ein Array, dessen Index ein String ist). Google sollte einiges dazu liefern, z.B. das hier: ![]() Gruß Volker |
Re: Variable über zusammengesetzte Strings ansprechen
Eine Stringlist kann als assoziatives Stringarray verwendet werden, wie schon 3mal beschrieben.
|
Re: Variable über zusammengesetzte Strings ansprechen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz