String in Variable umwandeln



  • Hallo Forum,

    ich möchte die Inhalte mehrerer Integer-Variablen nacheinander in einer Prozedur verarbeiten. Um das Programm übersichtlich zu gestalten, möchte ich die Reihenfolge der Variablen nicht direkt in der Prozedur, sondern in einer Stringliste, die die Namen der Variablen als Strings enthält, festhalten. Diese Stringliste sollte dann ausgelesen werden, indem der jeweils nächste String in den Variablennamen umgewandelt wird, also zum Beispiel zur Addition der Integers:

    Summe = 0;
    for(int i=0; i<length; i++)
    {
    Summe += WandleStringInVarUm(Stringliste[i]);
    }

    Gibt es eine solche Prozedur wie WandleStringInVarUm?

    Danke für Antworten.

    PS: Eine andere mögliche Lösung ist wohl das Speichern der Integers in TList::Items.



  • klar gibt es sowas. Hier ein kleiner ausschnitt aus der MSDN

    Convert a string to double (atof and _wtof), integer (atoi, _atoi64, _wtoi and _wtoi64), or long integer (atol and _wtol).

    double atof(
       const char *string 
    );
    double _wtof(
       const wchar_t *string 
    );
    int atoi(
       const char *string 
    );
    __int64 _atoi64(
       const char *string 
    );
    int _wtoi(
       const wchar_t *string 
    );
    __int64 _wtoi64(
       const wchar_t *string 
    );
    long atol(
       const char *string 
    );
    long _wtol(
       const wchar_t *string 
    );
    


  • Das ist ein Missverständnis. Ich möchte nicht Strings in Integers, sondern Strings in Bezeichner umwandeln, also zum Beispiel:

    int Zahl = 1;
    TStringList Stringliste = {"Zahl"};
    WandleStringInVarUm(Stringliste[0]);

    wobei der letzte Aufruf also Zahl ausgeben soll.

    Oder ein anderes Beispiel mit einem Formular und drei TEdits:

    enum EinsZweiDrei {"1","2","3"} Auswahl; // Auswahl wird vom Benutzer gesetzt
    WandleStrToInt("Edit" + Auswahl)->Text = "Dieses Feld wurde ausgewählt."



  • Sowas geht nicht, da später im Mashinencode garkeine Bezeichner mehr existieren die das Programm verwenden könnte.

    Alternative:
    Du machst ne Auswahl über einen int wert und wählst dann aus per switch:

    // Achtung: Pseudocode! ;D
    switch (varname)
    {
       case 'a':  cout << "Array A wurde gewählt" << endl;
                  break;
       case 'b': 
    
       // ....
    }
    


  • Ok, die Erklärung ist verständlich. Wie oben schon geschrieben, werde ich es mit einer TList, die die Daten enthält, versuchen.


Anmelden zum Antworten