Code Comments

Programming Forum and web based access to our favorite programming groups.
For Programmers: Free Programming Magazines | New: Database administration forum
Registration is free! Edit your profileCalendarFind other membersFrequently Asked QuestionsSearch -> 
Post New Thread











Thread
Author

Need Help in Loop Foreach
Hi, I'm new to Expect/TCL can someone help me out with this simple script.

I'd like to insert a loop, in such a way that it reads all the "System ID"
from a file called "SysIDList"

# cat SysIDList
8
9
10

#!/usr/local/bin/expect
# Query  all the systems status by inputting the SystemIDs on Expect Script

set env(HOME);
log_file $env(HOME)/getsys-out3;
spawn sys_monitor;
expect
" ****************************************
******************************";
expect "* SYSMonitor
*";
expect
" ****************************************
******************************";
expect " SYSMonitor-> ";
send "QUERY\r";
expect " ======================================";
expect " System ID             :";
send "8\r";                  # This is where the loop would be needed.
expect " SYSMonitor-> ";
send "exit\r";
log_file;




Report this thread to moderator Post Follow-up to this message
Old Post
Henr
09-26-06 12:02 AM


Re: Need Help in Loop Foreach
On Mon, 25 Sep 2006, Henr wrote:

> Hi, I'm new to Expect/TCL can someone help me out with this simple
> script.
>
> I'd like to insert a loop, in such a way that it reads all the "System
> ID" from a file called "SysIDList"
>
> # cat SysIDList
> 8
> 9
> 10
>
> # send "8\r";                  # This is where the loop would be needed.

set fd [open {SysIDList} {RDONLY}]
foreach id [split [read $fd] "\n"] {send "$id\r"}
close $fd

> expect " SYSMonitor-> ";
> send "exit\r";
> log_file;

There may be need for additional formatting if your file is not just plain
list of numbers with newlines.

--
-Kaitzschu
s="TCL ";while true;do echo -en "\r$s";s=${s:1:${#s}}${s:0:1};sleep .1;done

Report this thread to moderator Post Follow-up to this message
Old Post
Kaitzschu
09-26-06 12:02 AM


Re: Need Help in Loop Foreach
In article <ef99kb$j8f$1@engnntp1.cig.mot.com>, Henr <mlenf@yahoo.com> wrote:
>Hi, I'm new to Expect/TCL can someone help me out with this simple script.
>
>I'd like to insert a loop, in such a way that it reads all the "System ID"
>from a file called "SysIDList"
>
># cat SysIDList
>8
>9
>10
>
>#!/usr/local/bin/expect
># Query  all the systems status by inputting the SystemIDs on Expect Script
>
>set env(HOME);
>log_file $env(HOME)/getsys-out3;
>spawn sys_monitor;
>expect
>" ****************************************
******************************";
>expect "* SYSMonitor
>*";
>expect
>" ****************************************
******************************";
>expect " SYSMonitor-> ";
>send "QUERY\r";
>expect " ======================================";
>expect " System ID             :";
>send "8\r";                  # This is where the loop would be needed.
>expect " SYSMonitor-> ";
>send "exit\r";
>log_file;
>
>
>

I don't know.  I *think* you're asking for

..
expect \
" ****************************************
******************************"
foreach ID in {8 9 10} {
expect " SYSMonitor-> "
send "QUERY\r"
expect " ======================================"
expect " System ID             :"
send "$ID\r"                  # This is where the loop would be needed.
}
expect " SYSMonitor-> "
send "exit\r"
log_file

Try that.

If you want to read the list from a file, you might write instead
..
foreach ID in [exec cat SysIDList] {
..

Your terminating semicolons add no value, incidentally.

Still other variations might eventually give you more satisfaction.
Making these changes will be a good start, though.

Report this thread to moderator Post Follow-up to this message
Old Post
Cameron Laird
09-26-06 12:02 AM


Re: Need Help in Loop Foreach
Henr wrote:
> Hi, I'm new to Expect/TCL can someone help me out with this simple script.
>
> I'd like to insert a loop, in such a way that it reads all the "System ID"
> from a file called "SysIDList"
>
> # cat SysIDList
> 8
> 9
> 10
>
> #!/usr/local/bin/expect
> # Query  all the systems status by inputting the SystemIDs on Expect Scrip
t
>
> set env(HOME);
> log_file $env(HOME)/getsys-out3;
> spawn sys_monitor;
> expect
> " ****************************************
******************************";
> expect "* SYSMonitor
> *";
> expect
> " ****************************************
******************************";
> expect " SYSMonitor-> ";
> send "QUERY\r";
> expect " ======================================";
> expect " System ID             :";
> send "8\r";                  # This is where the loop would be needed.
> expect " SYSMonitor-> ";
> send "exit\r";
> log_file;

I think that by default expect used glob style matching by default so
expect "*" would match everything and you would not advance past the
intial expect until a timeout occured. I assume that you want to read
one
line at a time from a file that contains a single number on one line.
For
each one of these lines you want to run a query then return the
information
obtained from the query. I would read in the file first and make a list
of
IDs then I would log into the sys_monitor and get to the prompt then
loop the QUERY until finished.
# returns list that can be arrayable  using array set
proc getSysIDList {  file  { time_out 0 } } {
global env global spawn_id
array set retarray ""
set cmd [ auto_execok sys_monitor ]
if { [string length $cmd ] == 0 } {
error "Cannot find executable sys_monitor anywhere in $env(PATH)"
}
set idlist ""
if { [ catch { open $file "r" } fd ] != 0 } {
error "Unable to open file $file: $fd"
}
set fbuff [read $fd ]
catch { close $fd }
set idlist [split $fbuff "\n" ]
if { [llength $idlist } {
return {};
}
# ok login to sys_monitor
set timeout $time_out; # wait forever if default used
log_user 0
set pid [ spawn $cmd ]
set myid $spawn_id
set count 0
expect  -i $myid -re {.*SYSMonitor->}
send_user "Prompt found\n"
exp_send -i $myid -- "QUERY\r"
set id ""
expect {
-i $myid
-re {.*System ID[ \t]+:} {
set id [ lindex $idlist count ];
exp_send -i $myid -- "$id\r"
exp_continue;
}
-re {(.*)SYSMonitor->}  {
# get data
set retarray($id) $expect_out(1,string);
incr count
# go to next id in file/list or exit if at end
if { $count >= [ llength  $idlist ] } {
exp_send -i $myid -- "exit\r"
} else {
exp_send -i $myid -- "QUERY\r"
}
# loop around expect
exp_continue;
}
eof {
# use eof detection to tell us when we are done
# may want to break  after sending exit in above section if this does
# not work reliably.
if { $count < [llength $idlist ] } {
send_user "Process ended prematurely"
} else {
send_user "Process finished"
}
}
timeout {
send_user "Process timed out with only $count/[llength $idlist ]
queries performed"
}
}
# must reap children or you get zombies
set exitstatus [ exp_wait -i $myid -nowait ]
if { [catch {eval format \"pid:%s fd: %s expect exit: %s process
exit:%s\" $exitstatus } err ] != 0 } {
send_user "Exit status was $exitstatus"
} else {
send_user "Exit status:$err"
}
catch { exp_close -i $myid }
# if you have any data send it back
if { [ array size retarray ] } {
return [ array gets retarray ]
}
return {};
}

set filename SysIDList
# using default timeout so will wait forever for queries to return
array set systemoutput [ getSysIDList $filename ] ;
parray systemoutput


Report this thread to moderator Post Follow-up to this message
Old Post
Bezoar
09-27-06 12:02 AM


Sponsored Links




Last Thread Next Thread Next
Search this forum -> 
Post New Thread

Tcl archive

Show a Printable Version Send to friend Email This Page to Someone! subscribe to this thread Receive updates to this thread
Computer Consultants
Programming Jobs
Visual Basic Controls
SQL Server Programming
Webservices
Java Security
Visual Studio
C# Programming
Visual J++
Software engineering
Open source Software
Perl Programming
PHP Programming
ASP Programming
ASP .NET Programming
Visual Basic Programming
Windows Scripting Host
Java Programming
Java Help
Java Beans
VBScript
Cobol
MAC Applications
Unix Programming
Forum Jump:
All times are GMT. The time now is 09:16 AM.

 
Free MCSE Braindumps | Real Estate Topics

Programming forum archive

Copyrights CodeComments.com 2004 - 2006

Powered by vBulletin Copyright 2000-2006 Jelsoft Enterprises Limited.