lokale Variablen definieren aus DB oder Vektor



  • Hi Community, 😉

    Hat von euch vielleicht jemand einen Vorschlag, wie ich Daten Daten aus einer DB oder aus einen Vektor so verwende, dass sie als Variablen erkannt werden ?

    zur Verdeutlichuung hier mal ein kleines Bsp.

    Vector1 (CString) ["a","b","c"]
    Vector2 (double) [1.657, 12.34, 28.954]

    Ich möchte nun gern, dass letztendlich eine anhand dieser beiden Vektoren Variablendeklaration erfolgt, welche wie folgt aussieht :

    double a=1.657;
    double b=12.34;
    double c=28.954;
    

    derzeit versuche ich es wie folgt (dies ist jedoch nicht so ganz das worauf ich hinaus möchte).

    std::map<CString, double> variable;
    for i=1, i<=3; i++
    {
      variable[Vector1[i]]=Vector2[i];
    }
    

    Gruß Se33l


  • Mod

    Das ist dich OK so.
    Du musst intern symbolische Namen führen, sofern diese eben dynamisch sind... Sofern es immer Variblen mit den Namen a,b,c gibt könntest Du natürlich auch diese Namen auf interne IDs umlenken.

    Was stört Dich an der map?



  • Hi Martin,

    ich habe leider das Problem, das ich meine Berechnungsformel aus einem Editierfeld einlese.

    Mal angenommen im Editierfeld steht y=xy*ab+cy (wird geparst), dann ist in meinem Programm sichergestellt, dass xy, ab und cy mit Werten in der DB hinterlegt wurden.

    ausgelesen ergibt dies :

    V1 [xy, ab, cy];
    V2 [1.65, 4.87, 9.65];

    und im Programm müsste es ja dann lauten :

    double xy=1.65;
    double ab=4.87;
    double cy=9.65;
    double y=xy*ab+cy; //steht nicht so drin, da ja geparster Inhalt des Editierfeldes  ;) -> soll nur verdeutlichen was ich vorhabe
    

    Gruß se33l



  • 😞 hat niemand eine Idee, wie ich dieses Vorhaben umsetzen kann ?
    Das Problem ist leider nach wie vor aktuell für mich.

    Gruß se33l



  • Du könntest es vllt mit einem Makro versuchen, z.B.:

    #define DEKLARATION(varname,value) double varname = value
    

    Allerdings kannst du das auch nicht dynamisch benutzen (d.h. du kannst keine Strings als varname angeben). Das liegt daran dass C++ keine dynamischen Variablennamen bietet, z.B. weil es zur Compilezeit überprüft ob die Variablennamen eindeutig sind.

    Ein Umweg währe über eine Liste mit einem Key/Value Pärchen, also zum Beispiel ein

    std::vector< std::pair<CString,double> > PairList;
    

    Das währe dann ein C++ Vector (einfache Liste), deren Elemente jeweils die 2er-Tupel sind.

    Hinzufügen eines Pärchens zu der Liste würde dann so gehen:

    std::pair<CString,double> TempPair( CString("a"), 1.657 );
    PairList.push_back( TempPair );
    

    Und zugreifen auf ein solche Objekt:

    double val = PairList[i].second
    

    Hoffe das hilft dir.

    /Edit: mir fällt gerade auf das du ja anstatt des wahrscheinlich kompliziert erscheinenden std::pair auch einfach ein struct nehmen kannst, also ca so:

    struct WertePaarStrDouble
    {
      CString name;
      double value;
    };
    

    Das kannst du dann in einen std::vector packen.



  • hey RedPuma,

    vielen Dank für deine Anregungen... 👍

    Leider war ich dabei auch schon gelandet und komme nach wie vor nicht weiter...

    Problem ist immernoch, dass ich keine dynamischen Zuweisungen vornehmen kann.

    Ums mal etwas genau zu beschreiben 😉

    Ich habe ein Textfeld, in welchem der User eine Formel (Syntax muss natürlich stimmen) eingeben kann.

    Bsp.: y = Wohnungen + Einwohner

    Da ich bei der Berechnung der die Formel parse, fehlen in meinem Programm natürlich noch die Zuweisungen für Wohnungen und Einwohner.
    Diese Angaben sollen aus 2 Vektoren, einer map, einem pair oder ... (welche vorher aus einer SQL-Datenbank entnommen wurden) ausgelesen werden.
    Darin steht z.Bsp.

    V1[0]=Wohnungen
    V1[1]=Einwohner

    V2[0]=4
    V2[1]=10

    Letztendlich brauche ich nun folgende Zuweisung:

    double Wohnungen=4.00;
    double Einwohner=10.00;
    

    Ich hoffe ihr versteht, worauf ich hinaus möchte.

    Gruß Se33l

    P.S. da die Berechnung und die SQL-Datenbank veränderbar ist, handelt es sich um eine dynamische Zuweisung, die bei jeder Programmausführung erfolgen soll.


Anmelden zum Antworten