expect, using associative arrays

Can somebody give me example of using associative arrays within expect script?
I need to create a map from string to string, then access/get value by key.
LVL 43
Who is Participating?

Improve company productivity with a Business Account.Sign Up

ahoffmannConnect With a Mentor Commented:
array set hash [list a 2 b 3 c 4]
array names hash
puts $hash(b)

# expect is tcl
ravenplAuthor Commented:
Also, is there a way to use if/else statement?
Duncan RoeConnect With a Mentor Software DeveloperCommented:
All expect arrays are associative. For instance, you might put something like

if {[info exists xarray(fred)]} {<whatever ....>}

This tests if you allocated an array element suffix of fred to the array xarray.

You certainly can use if/else although "else" itself is in fact a "noise" word. You must have Tcl installed for expect to work, so try "man n if" for the full story:

20:22:46$ man n if
if(n)                 Tcl Built-In Commands                 if(n)


       if - Execute scripts conditionally

       if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?

       The if command evaluates expr1 as an expression (in the same way that expr evaluates its argument).  The value of the expression must be a boolean (a numeric value, where 0 is false and anything
       is true, or a string value such as true or yes for true and false or no for false); if it is true then body1 is executed by passing it to the Tcl interpreter.  Otherwise expr2 is evaluated as an
       expression and if it is true then body2 is executed, and so on.  If none of the expressions evaluates to true then bodyN is executed.  The then and else arguments are optional ``noise words'' to
       make the command easier to read.  There may be any number of elseif clauses, including zero.  BodyN may also be omitted as long as else is omitted too.  The return value from the command is  the
       result of the body script that was executed, or an empty string if none of the expressions was non-zero and there was no bodyN.

       boolean, conditional, else, false, if, true

Tcl                                                         if(n)

Just read the 2nd sentence of your question :-/

Very basically:

set array(string1) <xlate string1>
(same for 2, 3, 4 &c.). Except you'd probably use read or gets to read your table into the array. On a query, you'd use the info exists construct outlined earlier to verify the string is known, and return the translated string if so.
BTW you could use tclsh instead of expect, unless you actually use expect's additional facilities as well.
ahoffmannConnect With a Mentor Commented:
if {$hash(b)==3} {puts "yes"} else { puts "no" }
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.