Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
Hallo Jochen,<br>
<br>
als erstes einmal eine Frage:<br>
Wie ermittelst Du zur Laufzeit den Namen der Variablen?<br>
<br>
Leider dürfte sich Deine Idee so nicht umsetzen lassen, da zur Laufzeit die Namen<br>
der Variablen, die Du im Sourcecode vergeben hast, nicht mehr existieren.<br>
Der Compiler hat sie in Adressen übersetzt.<br>
<br>
Gib doch mal eine Beschreibung, was Du eigentlich genau vorhast, vielleicht gibt es<br>
ja eine andere Lösung für die Implementierung Deiner Idee.<br>
<br>
Ciao<br>
Chris<br>
die Variablen sind deklariert und bekannt, z.B. Vari1.
Mit PChar(Vari1) kann ich den Inhalt ermitteln. So weit, so gut.
Ich ermittle nicht aus der Anwendung selbst, sondern aus einer Ascii-Datei den an einer bestimmten Stelle erforderichen Variablennamen. Dabei erhält eine temporäre Variable den Namen der gesuchten Variablen (TempVar:= 'Vari1'). Wie setze ich nun den Zeiger auf Vari1 und nicht auf TempVar.
Ist wohl mehr (m)ein Pascalproblem als eines von Delphi; daher auch bei 'Neulinge'.
Um Variablen zu initialisieren eignet sich die Klasse TIniFile. Hast du dir daraus ein Objekt generiert, kannst du mit dessen Methoden die Inhalte lesen.
Hallo Jochen,
da mir nichts besseres einfällt, würde ich es anstatt mit Variablen mit einer Klasse sprich Objekten versuchen. Die kann man über Ihren Namen als String dann ansprechen.
Wenn Du´s genauer haben willst, dann mußt Du´s schreiben
Hallo Gesine,
Danke, Dein Tipp klappt. Das Problem ist, dass ich die .ini-Datei jedesmal vom Server auf den Client kopieren oder prüfen muss, ob die Datei auf dem Client vorhanden und noch aktuell ist.
Ich suche also immer noch eine Möglichkeit, über den Namen an den Inhalt zu kommen.
if tempVar = 'vari1' then
ShowMessage(vari1);
klappt; bei 200 oder mehr möglichen Variablen wird es aber unübersichtlich. Ich will Kontrollstrukturen (if, while, case ...) vermeiden. Daher die Frage, wie kann ich das auf einen Einzeiler reduzieren, etwa
ShowMessage(???(tempVar)???)
MfG
JoW
Dann bleiben dir wohl nur ein Array. Aus deiner Inidatei liest du dann nur den Index des gewünschten Elements. Um die Lesbarkeit im Code zu erhöhen könntest du Konstanten verabreden.
Hi Jochen,<br>
<br>
kommt der folgende Code dem nahe, was Du Dir vorstellst?<br>
<br>
unit MAIN;<br>
<br>
interface<br>
<br>
uses<br>
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br>
StdCtrls, IniFiles;<br>
@Klaus-Peter<br>
<br>
Könntest Du mir mal verdeutlichen, wo hier der grosse Unterschied<br>
zwischen<br>
<br>
Add('v1='+v1) und Add(Format('%s=%s',['v1','Wert von v1']))<br>
<br>
besteht?<br>
<br>
Ansonsten sehe ich zu meinem Beispiel keinen Unterschied.<br>
<br>
Ciao<br>
Chri
mir gefiel in diesem Zusammenhang die Nutzung von Format() im Zusammenhang mit Values[].
Das war das Interessante an dieser Variante. Natürlich hat sie keine andere grundsätzliche Funktionalität. Ich fand es nur einen interessanten Lösungsansatz. Mehr nicht.
Hallo Klaus-Peter,<br>
<br>
Du hast natürlich recht. Gerade in diesem Abschnitt kann es nie<br>
schaden zusätzliche Funktionalitäten vorzustellen.<br>
Hätte aber auch ebensogut sein können, dass ich was wichtiges<br> übersehen hatte.<br>
Die Verwendung von Format gefällt mir in diesem Zusammenhang übrigens<br>
nicht ganz so gut.<br>
Mal abgesehen davon, dass es mühsamer zu schreiben ist, benötigt es<br>
noch unnötigerweise Ressourcen. (Eben den Aufruf von Format).<br>
Was lesbarer ist muss jeder für sich selber entscheiden.<br>
<br>
Ciao<br>
Chri
Comment