Inhalt eines Strings ausführen

  • Hallo,

    in einem längeren Script, welches bisher gut funktioniert, möchte ich in einer GUI ein paar Checkboxen einfügen.
    Füge ich diese normal als Code ein, so funktioniert alles:

    $punkt_allgemein = GUICtrlCreateCheckbox("Allgemein",10,120,300)

    Da der Inhalt der Checkboxen aber aus einer externen Datei ausgelesen wird, muss ich diese Zeilen aber zusammenbauen lassen:

    Local $tb_zeile = '$' & $value1 & ' = GUICtrlCreateCheckbox("' & $value2 & '", ' & $p_xpos & ', ' & $p_ypos & ', 300)'

    der Inhalt von $tb_zeile entspricht genau der oben aufgeführten Zeile. Manuell eingesetzt funktioniert sie.

    Die Frage: Wie kann ich nun diesen String ausführen, damit meine Checkbox (und alle weiteren) in der GUI erscheinen?
    Ich vermute, dass ich hier den Wald vor Bäumen nicht sehe, aber ich krieg's verflixt nochmal nicht hin... Kennt jemand eine Lösung?

    Gruß

    albie

  • Mit nem Array...

    AutoIt
    ;Keine Ahnung, wie du einliest, mach es so, dass du ein 2D Array bekommst mit $value1 auf [0], $value2 auf [1]
    Global $arReadData[0][2];Hier soll der kram aus der Datei rein
    Global $arCheckboxes[Ubound($arReadData)][2]
    for $i=0 to ubound($arReadData) step 1
    	$arCheckboxes[$i][0]=$arReadData[$i][0]
    	$arCheckboxes[$i][1]=GUICtrlCreateCheckbox($arReadData[$i][1],5,5+$i*25,300)
    	;$i*25 sorgt dafür, dass sie nicht übereinander liegen, sondern immer weiter nach unten geschrieben werden
    next
    ;Später kannst du dann über $arCheckboxes[?][1] auf die Checkbox zugreifen, während der Value-Name in $arCheckboxes[?][0] steht.

    MfG Kanashius

    PS: Wenn du sagst, wie die Datei aussieht und du sie einliest helf ich dir gerne auch beim einlesen.

  • Hallo Kanashius,


    ich muß meine Anforderungen noch mal spezifizieren: in der Konfigurationsdatei sind die Themen als Variablenname und Anzuzeigender Titel (und Zählvarialble) angegeben. Da in dem zu erzeugenden Formular sowohl Check- als auch Radiobuttons vorkommen sollen und dazu letztere mit einer Überschrift mit Box abgehoben werden sollen, sieht die Datei dann so aus:

    Spoiler anzeigen

    Erläuterung:
    tbc steht für Checkbox, tbr für Radiobox, tbh für Header, also für ein Label mit Box um die folgenden Radioboxen.
    Die Zahl beim Header ist eine Vereinfachung für den Programm-Code und stellt die Anzahl der folgenden Radioboxen dar, somit die Y-Größe der Box.


    Im Original sind die Themen natürlich durch sprechende Namen ersetzt.
    Daher sollen bei der Abfrage Check- und Radioboxen auch diese Variablennamen verwendet werden. Deine Lösung mit dem Array passt daher leider nicht ganz.


    Das etwas vereinfachte Hauptprogramm sieht folgendermassen aus:

    Spoiler anzeigen

    Die Zeile, in der der String definiert wird, ist Zeile 27. Der Inhalt dieser Zeile soll dann den Checkbutton erzeugen.
    Wie gesagt: lese ich den Inhalt des String $tb_zeile aus und plaziere ihn manuell im Code, so wird die Checkbox brav erzeugt. Aber wie geht es automatisch?

    Beim weiteren Recherchieren bin ich noch auf einen Thread vom Januar gestossen: "@crlf umwandeln in echten Zeilenumbruch, in Analogie @tab etc.". Das passt aber leider nicht so ganz.

    Gruß

    Albie

  • Hi,

    Wenn ich das richtig verstanden habe möchtest du Varriablen dynamisch benennen. Das ist zwar möglich, allerdings sehr unsauber und fehleranfällig.

    Im Original sind die Themen natürlich durch sprechende Namen ersetzt.
    Daher sollen bei der Abfrage Check- und Radioboxen auch diese Variablennamen verwendet werden. Deine Lösung mit dem Array passt daher leider nicht ganz.

    Doch die Varriante mit dem Array (von Kanashius) ist die richtige herangehensweise.

    ich muß meine Anforderungen noch mal spezifizieren: in der Konfigurationsdatei sind die Themen als Variablenname und Anzuzeigender Titel (und Zählvarialble) angegeben

    Du kannst den "Variablennamen" einfach mit in das Array speichern, so kannst du ihn später immernoch zum zuordnen verwenden.

    $punkt_allgemein =

    Zudem frage ich mich was der Sinn davon ist Varriablen über eine Konfi-Datei zu bennen, denn zum gezielten Aufrufen müssen die Variablen namen eh im Script stehen (oder auch aus der Datei gelesen werden, was dann allerdings der Methode jeglichen sinn nimmt).

    mfg
    Zeitriss

  • Hi,
    für die Benennung von Variablen und deren Verwendung gibt es die Befehle EVAL() und ASSIGN().
    Wobei ich auch den Sinn des Verfahrens des TE in Frage stelle, ich würde ein Array mit allen in der Konfigurationsdatei vorhandenen Variablen und Werten aufziehen und damit arbeiten.

  • Hallo,

    besten Dank für die Infos.
    Und ja, es gibt besseren Programmierstil als meinen ;-), für das nächste Mal habe ich viel gelernt und werde sicher anders an das Problem herangehen.
    Und: die Verwendung der .csv-Datei ist leider Vorgabe und dem Problem geschuldet.

    Und zu guter letzt:
    die Info von Andy mit EVAL() und ASSIGN() hat mein Problem gelöst! Ich hatte bereits angefangen, das Programm komplett umzustricken, um mit einem Array zu arbeiten. So konnte ich den String dann anschließend mit einem einfachen EXECUTE() doch starten.
    Super, vielen Dank für eure Mühe!

    Gruß

    Albie