variablen und deren werte aus externem file



  • hi folks!

    wollte fragen ob das geht.
    also ich habe eine txt-datei, die so aussieht:

    x = 3
    y = 16
    z = 0
    

    dieses file soll jetzt ausgelesen werden und die variablen (links) sollen als echte variablen (benutzbar vom programm) erstellt werden.
    also dass ich später z.b. damit arbeiten kann, z.b. if (x == 0)...
    und die variablen müssen beliebig benennbar sein, aber später im system denselben namen haben.

    falls das nicht geht, kann ich ja natürlich das in 2 reservierte variablen (z.b. varName0, var1Val0) laden und dann damit arbeiten.
    wäre das einfacher/besser?

    grüsse, 🙂

    ---loki



  • Nein, C ist nicht PHP 🙂

    Es gibt zur Laufzeit keine "Variablennamen", sondern nur noch die fertigen Speicherstellen und ihre Adressen.

    MfG SideWinder



  • Also so wie du dir das vorstellt bzw. beschrieben hast, kann es nicht funktionieren. Das geht schon mal vom Logischen her nicht. Schließlich sollen die Variablen dynamische Namen haben, wobei du willst, dass die Namen im Quellcode hart kodiert sind.

    Mein Vorschlag ist, dass du dir eine Struktur anlegst, in der du den Namen der Variablen speicherst und deren Wert.

    Was willst du eigentlich machen? Soll das ein Interpreter werden?



  • AJ schrieb:

    Mein Vorschlag ist, dass du dir eine Struktur anlegst, in der du den Namen der Variablen speicherst und deren Wert.

    Was willst du eigentlich machen? Soll das ein Interpreter werden?

    dann mache ich das anders.
    ich werde zu beginn 100 variablen erstellen, wobei eine den variablennamen und die zweite den wert enthält.
    ist das funktionabel oder geht das einfacher/dynamischer?

    zu 2.: ja, das soll teil eines kleinen script-interpreters werden.



  • @loki: Ja zB in C++ std::map<string,int>. Sowas kannst du dir ja funktional in C bauen!

    MfG SideWinder



  • @loki
    Wie gesagt, mach dir lieber eine Struktur:

    typedef struct
    {
       char var_name[20];
       char var_wert[50];
    }vars;
    ...
    vars variablen[100];
    ...
    


  • *schauder*, was macht denn dieses Array hier statisch 😮

    MfG SideWinder



  • @AJ:
    ja, das sieht gut aus.
    muss jetzt halt nochmal ein bisschen tutorial lesen und wissen über structs auffrischen (benutze ich sonst nie...)

    thanx.

    ---loki



  • loki1985 schrieb:

    @AJ:
    ja, das sieht gut aus.
    muss jetzt halt nochmal ein bisschen tutorial lesen und wissen über structs auffrischen (benutze ich sonst nie...)

    thanx.

    ---loki

    Nicht wissen was ein struct is aber nen Interpreter schreiben wollen...



  • interpreter schreiben will ich nicht mehr...
    denn den habe ich schon fertig, und er funktioniert 🤡

    nur eben variablen definieren kommt jetzt noch dazu....



  • Den Fall sollte man nicht mit statischen Arrays erledigen sondern besser mit einer linked list in der die Namen und Werte stehen.

    Mann kann sich dann auch überlegen ob man diese Liste mit einem Bubblesort versieht, so daß die am häufigsten verwendeten Variablen somit am Anfang der Liste stehen.

    Hab das mit folgenden Strukturen implementiert.

    #define LESTRING 0  /*  Nbag element is a string */
    #define LESHORT  1  /*  Nbag element is a signed short int */
    #define LELONG   2  /*  Nbag element is a signed long int */
    #define LEUSHORT 3  /*  Nbag element is a unsigned short int */
    #define LEULONG  4  /*  Nbag element is a unsigned long int */
    #define LEFLOAT  5  /*  Nbag element is a float */
    #define LEDOUBLE 6  /*  Nbag element is a double */
    
    typedef struct                 /*  Datenstruktur mit trivialem Inhalt */
    {
       unsigned int type;          /*  type  enthält die Art der Daten */
       void   *Daten;              /*  generic Pointer for Data */
       char   *Name;               /*  Name der Variablen */
    } NBag;
    
    struct simplenode              /*  Struktur für eine einfache verkette Liste */
    {
       struct simplenode * next;   /*  Pointer to next element */
       struct simplenode * prev;   /*  pointer to previous element */
       NBag   *element;            /*  pointer to structure mit contents of node */
    };
    
    typedef struct simplenode snode;
    

Anmelden zum Antworten