Variablen zusammensetzen?

  • hallo,

    ich will mir eine speicherfunktion erleichtern. als ausgangsvariablen habe ich leider kein array verwendet, nun will ich das ganze aber trotzdem mit iniwrite in eine ini abspeichern. da das schema der variablen gleich ist, versuche ich, den namen der variable zusammenzusetzen:

    allerdings geht das so natürlich nicht. die variablen sind im format mklogin1x ; mklogin1y; mklogin2x, mklogin2y usw..
    der keyname ist richtig geschrieben, der variablen name auch, aber er wird eben nicht als variable behandelt. wie schreib ich es richtig, dass er die namen ohne "" zusammenfügt und dann als variable behandelt?

  • hallo
    da kann wer woll nicht schlafen
    ich wurde 1. noch eine abfrage rein basten ob es das File gibt
    weiter würde ich das von :

    [autoit]

    IniWrite(@Scriptdir& "/save.ini", "mk_login","mklogin"&$i&$xy, "$mklogin"&$i&$xy)

    [/autoit]


    auf

    [autoit]

    IniWrite(@Scriptdir& "/save.ini", "mk_login","mklogin"&$i&$xy, $mklogin&$i&$xy)

    [/autoit]


    Ändern

  • Also wenn ich dich richtig verstehe sind "x" & "y" die eigentlichen Variablen, oder !?
    Es wäre von Vorteil, wenn Du deine Funktion "auslesen()" mal postest, damit man weiss was da überhaupt zurückgegeben wird ...
    Deine For-Schleife macht keinen Sinn, wenn Du nur zwei Werte hast.
    Und wenn Du sie unbedingt nutzen willst, dann gleich mit $i und nicht mit $r und dann $i inkrementieren. ;)

    Spoiler anzeigen
    [autoit]

    Func auslesen()

    $x = 'Variable_X'
    $y = 'Variable_Y'

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func save()

    auslesen()
    IniWrite(@ScriptDir & "/save.ini", "mk_login","mklogin1" & $x, "mklogin1" & $x)
    IniWrite(@ScriptDir & "/save.ini", "mk_login","mklogin2" & $y, "mklogin2" & $y)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]


    Oder:

    [autoit]

    Func save()

    auslesen()
    For $i = 1 To 2
    IniWrite(@ScriptDir & "/save.ini", "mk_login","mklogin" & $i & $x, "mklogin" & $i & $x)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]

    Gruß
    Greenhorn


  • danke für die antworten.. ja, habe ganze nacht durchgescriptet :)

    also, wenn ich das richtig sehe ist da leider noch keine lösung dabei, so hatte ich es ja schon: der name der existierenden variable ist korrekt (ist der gleiche name wie auch der key heist). sobald man in den wert für "value" aber etwas anderes als eine korrekte variable ala $var schreibt, kommts zum error. die variablen existieren alle, aber ein zusammengesetzter variablenname wie

    [url='http://www.autoitscript.com/autoit3/docs/functions/IniWrite.htm']

    [autoit]

    IniWrite(@ScriptDir & "/save.ini", "mk_login","mklogin" & $i & $x, "mklogin" & $i & $x)

    [/autoit]


    funktioniert leider nicht, das hatte ich schon getestet. ich überlege grade, nachträglich noch alles in arrays umzuwandeln, wobei ich da noch einiges mehr ändern müsste als nur "auslesen()"


    Einmal editiert, zuletzt von Lon (23. Dezember 2007 um 09:00)

  • [autoit]

    Func save()

    auslesen()
    For $i = 1 To 2
    $Key = Eval('mkloginverz_' & $i)
    $ValueX = Eval('mklogin' & $i & 'x')
    $ValueY = Eval('mklogin' & $i & 'y')
    IniWrite(@ScriptDir & '\save.ini', $Key, $ValueX)
    IniWrite(@ScriptDir & '\save.ini', $Key, $ValueX)
    Next
    For $i = 1 To 5
    $Key = Eval('linky_verz' & $i)
    $ValueX = Eval('linky' & $i & 'x')
    $ValueY = Eval('linky' & $i & 'y')
    IniWrite(@ScriptDir & '\save.ini', $Key, $ValueX)
    IniWrite(@ScriptDir & '\save.ini', $Key, $ValueX)
    Next

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]


  • okay, das speichern klappt schonmal wunderbar, die ini sieht so aus:

    Spoiler anzeigen

    [mk_login]
    mklogin1x=3534
    mklogin2x=150
    mklogin1y=690
    mklogin2y=100
    [loginverz]
    $mkloginverz_1=5000
    $mkloginverz_2=3000
    $mkloginverz_3=1000
    [linkykoor]
    linky1x=16
    linky2x=264
    linky3x=600
    linky4x=500
    linky5x=630
    linky1y=255
    linky2y=475
    linky3y=600
    linky4y=500
    linky5y=580
    [linky_verz]
    $linky_verz1=300
    $linky_verz2=300
    $linky_verz3=300
    $linky_verz4=300
    $linky_verz5=300

    mit dem einlesen tu ich mich aber noch schwer, einer der mehreren nicht funktinierenden ansätze sieht so aus:

    Code
    $xy = "x"
       	$i = "1"
       for $r = 1 to 2
       Global $var = Eval("mklogin"&$i&$xy)
       Assign ("mklogin"&$i&$xy, IniRead(@Scriptdir& "/ebot_save.ini", "mk_login","mklogin"&$i&$xy,"ini fehlerhaft oder nicht vorhanden!"), 4)
       $i +=1
       next
  • hmm ja danke. aber wie löse ich das problem? wie kehre ich die funktionierende inischleife, die mit eval arbeitet, wieder um?

  • So ?

    [autoit]

    $xy = "x"
    $i = "1"
    for $r = 1 to 2
    Assign ("mklogin"&$i&$xy, IniRead(@Scriptdir& "/the.ini", "mk_login","mklogin"&$i&$xy,"ini fehlerhaft oder nicht vorhanden!"), 0)
    Global $var = Eval("mklogin"&$i&$xy)
    msgBox(0,"",$var)
    $i +=1
    next

    [/autoit]