Announcement

Collapse
No announcement yet.

Wert einer in einem String hinterlegten Variablen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wert einer in einem String hinterlegten Variablen

    Den aktuell erforderlichen Variablennamen ermittele ich zur Laufzeit. Der Name ist als Wert in einer String-Variablen hinterlegt.

    Wie komme ich an den Wert der gefundene Variablen?

  • #2
    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&gt

    Comment


    • #3
      Hallo Christian,

      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'.

      By
      Jochen-W

      Comment


      • #4
        Hi,

        Um Variablen zu initialisieren eignet sich die Klasse TIniFile. Hast du dir daraus ein Objekt generiert, kannst du mit dessen Methoden die Inhalte lesen.

        z.B.:
        <pre>
        IniFile := TIniFile.Create('C:\Temp\Test.ini' );
        vari1 := IniFile.ReadString('ABSCHNITTx', TempVar, 'Leer' );
        </pre&gt

        Comment


        • #5
          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

          Comment


          • #6
            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

            Comment


            • #7
              Hi,

              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.

              Gruß
              Gesin

              Comment


              • #8
                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>

                type<br>
                TForm1 = class(TForm)<br>
                Edit1: TEdit;<br>
                Button1: TButton;<br>
                Button2: TButton;<br>
                procedure FormDestroy(Sender: TObject);<br>
                procedure Button1Click(Sender: TObject);<br>
                procedure Button2Click(Sender: TObject);<br>
                private<br>
                { Private-Deklarationen }<br>
                public<br>
                { Public-Deklarationen }<br>
                end;<br>
                <br>
                var<br>
                Form1 : TForm1;<br>
                sTabelle : TStringList;<br>
                sEineVariable : String;<br>
                sAndereVariable : String;<br>
                sNochEine : String;<br>
                <br>
                implementation<br>
                <br>
                {$R *.DFM}<br>
                <br>
                procedure TForm1.FormDestroy(Sender: TObject);<br>
                begin<br>
                sTabelle.Free;<br>
                end;<br>
                <br>
                procedure TForm1.Button1Click(Sender: TObject);<br>
                begin<br>
                <b>ShowMessage(sTabelle.Values[Edit1.Text]);</b><br>
                end;<br>
                <br>
                procedure TForm1.Button2Click(Sender: TObject);<br>
                begin<br>
                sTabelle.Values[Edit1.Text] := 'Wert von '+Edit1.Text+' geändert';<br>
                end;<br>
                <br>
                initialization<br>
                Begin<br>
                sEineVariable := 'Irgendwas';<br>
                sAndereVariable := 'Was anderes';<br>
                sNochEine := 'Und wieder was neues';<br>
                sTabelle := TStringList.Create;<br>
                sTabelle.Add('sEineVariable='+sEineVariable);<br>
                sTabelle.Add('sAndereVariable='+sAndereVariable);< br>
                sTabelle.Add('sNochEine='+sNochEine);<br>
                end;<br>
                end.<br>
                <br>
                Ciao<br>
                Chris<br&gt

                Comment


                • #9
                  Hallo Christian,<br>
                  hat geklappt. Danke!<br>
                  Bye JoW

                  Comment


                  • #10
                    Dank Thomas Greiner <[email protected]> hier noch eine interessante Form:
                    [pre]
                    var
                    DataField:Tstrings;

                    procedure TForm1.Button1Click(Sender:TObject);
                    var
                    v1, tempVar:string;
                    begin
                    v1 := 'Jonas';
                    tempVar := 'v1';
                    DataField := TStringList.Create;
                    DataField.Add(Format('%s=%s',['v1','15.03.1980']));
                    ShowMessage(DataField.Values[tempVar]);
                    // Zeigt den Inhalt der Variablen v1
                    DataField.Free
                    end;
                    [/pre]

                    mfg Klaus-Pete

                    Comment


                    • #11
                      Jetzt noch mal schöner
                      <pre>
                      var
                      DataField:Tstrings;

                      procedure TForm1.Button1Click(Sender:TObject);
                      var
                      v1, tempVar:string;
                      begin
                      v1 := 'Jonas';
                      tempVar := 'v1';
                      DataField := TStringList.Create;
                      DataField.Add(Format('%s=%s',['v1','15.03.1980']));
                      ShowMessage(DataField.Values[tempVar]);
                      // Zeigt den Inhalt der Variablen v1
                      DataField.Free
                      end;
                      </pre&gt

                      Comment


                      • #12
                        @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

                        Comment


                        • #13
                          Hallo Christian,

                          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.

                          mfg Klaus-Pete

                          Comment


                          • #14
                            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

                            Working...
                            X