Jump to content

a simple variable question [Solved]


Recommended Posts

If I wanted the value of a variable in the name of another variable in php I would say:

$x = 'swamp';
$y = 'atchafalaya';
$z = 'location';

$%x%_%y%_%z% = 'in LA';

echo $swamp_atchafalaya_location;
//output would be 'in LA'

how the hell can i do this with autoit? I have tried eval, execute, and the %$var% methods and just have no idea.

Edited by donaldduck
Link to comment
Share on other sites

Opt("ExpandVarStrings", 1)

$x = "swamp"
$y = "atchafalaya"
$z = "location"

Assign("$x$_$y$_$z$", "in LA")

ConsoleWrite(Eval("$x$_$y$_$z$") & @CRLF)
;~ output would be 'in LA'

The Opt("ExpandVarStrings", 1) line is there so you don't need to use annoying superfluous string concatenation operation.

Thanks for the reply, but your solution does not solve my problem. I need to be able to access the data via $swamp_atchafalaya_location, not $x$_$y$_$z$. As I recall this is accomplished in several other languages via forcing variable evaluation in the %var% manor. i.e.

$a = 'sigh';

$%$a% = 'apple';

echo $sigh;
//prints 'apple';

I understand that the example is overcomplicated, but the example is a simplification of a larger issue. If I can get my question answered on the small scale I should be able to translate it.

Link to comment
Share on other sites

more specifics, maybe the autoit wizards know how to do this easier. My code works just fine except where I want to redefine variables for easier debugging later down the road.

$ini_names = IniReadSectionNames ( "test.ini" )

If @error Then
    MsgBox(0, "error", "Cannot open .ini")
    Exit
EndIf

For $i = 1 To $ini_names[0]
    $section = IniReadSection ( "test.ini", $ini_names[$i] )
        For $ii = 1 To $section[0][0]
            $pos_%$ini_names[$i]%_%$section[$ii][0]% = $section[$ii][1]
        Next
Next


Exit

My .ini:

[sec1]
x=23
y=108
desc=random

[sec2]
x=44
y=548
desc=random2

I want to end up being able to call $pos_sec2_x and it work be working fine, but I do not know what (if there is a way) of having autoit evaluate a variable's value on the left side of an expression. AHK does it just fine, but I don't want to bridge everything I have already written over to it.

Edited by donaldduck
Link to comment
Share on other sites

Opt("ExpandVarStrings", 1)

$a = 'sigh'

Assign('a', 'apple')
ConsoleWrite($a & @CRLF)

$x = 'swamp';
$y = 'atchafalaya';
$z = 'location';

Assign('$x$_$y$_$z$', 'in LA')
ConsoleWrite($swamp_atchafalaya_location & @CRLF)

AU3Check will warn you that $swamp_atchafalaya_location is references but is not initialized. It should work, though.

Edit: Even though, I don't see the point in writing such a code. If you know the content of $x, $y and $z, you don't need such a code.

Edited by Authenticity
Link to comment
Share on other sites

cool, let me double check.

As it stands now the only way I have gotten it to work is by doing this:

Global $pos_sec1_x = IniRead("test.ini", "sec1", "x", "NotFound")
Global $pos_sec1_y = IniRead("test.ini", "sec1", "y", "NotFound")
Global $pos_sec1_desc = IniRead("test.ini", "sec1", "desc", "NotFound")

Global $pos_sec2_x = IniRead("test.ini", "sec2", "x", "NotFound")
Global $pos_sec2_y = IniRead("test.ini", "sec2", "y", "NotFound")
Global $pos_sec2_desc = IniRead("test.ini", "sec2", "desc", "NotFound")

The point is that I may add 100 more sections to the config file and I would rather not have to keep expanding my declaration section when a for loop would do.

Link to comment
Share on other sites

No offense but there is most likely a much more efficient, and better way of doing this besides making your life easier to debug.

Most likely... but I can edit the x/y locations quickly via:

$ini_names = IniReadSectionNames ( "test.ini" )

If @error Then
    MsgBox(0, "error", "Cannot open .ini")
    Exit
EndIf

$confirm = MsgBox(1, "confirm", "View data?" )
If $confirm = 1 Then
    For $i = 1 To $ini_names[0]
        $section = IniReadSection ( "test.ini", $ini_names[$i] )
        MsgBox(4096, $ini_names[$i], " " & $section[1][0] & ": " & $section[1][1] & @CRLF & $section[2][0] & ": " & $section[2][1] & @CRLF & $section[3][0] & ": " & $section[3][1] & @CRLF)
    Next
EndIf

$confirm = MsgBox(1, "confirm", "Reprogram?" )
If $confirm = 1 Then
    For $i = 1 To $ini_names[0]
        $section = IniReadSection ( "test.ini", $ini_names[$i] )
        While 1
            Sleep ( 150 )
            ToolTip("right click on " & $section[3][1], $tt_x, $tt_y)
            If _IsPressed("02") Then
                $pos = MouseGetPos()
                ToolTip("Got it!", $tt_x, $tt_y)
                IniWrite("test.ini", $ini_names[$i], $section[1][0], $pos[0])
                IniWrite("test.ini", $ini_names[$i], $section[2][0], $pos[1])
                ExitLoop
            EndIf
        WEnd
    Next
EndIf

Thus adding or editing points ad nauseum is easy.. if I could only get the problem to work forward as well it would be nice.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...