[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Help with array

Victor Reyes

7/17/2008 1:15:00 PM

[Note: parts of this message were removed to make it a legal post.]

Hello team,

I am having an issue with the code below.
Could you please take a quick look at the highlighted and commented code
below and let me know what's wrong?

Thank you

Victor


input.file
group.was=hostname1 hostname.2 hostname.r3
group.web=webserver1 webserver2 webserver3 hostname1 /usr/local/bin/test.sh
web /usr/local/bin/testcmd.sh
#end of input.file

# Program
@myhostname = `hostname` # webserver3
#comment# The intent is to create a arrays "was" and "web" and to assign the
values in the group statement
IO.foreach("inpit.file") do |line|
if line =~ /^#/ || line.chomp.length == 0
next
end # if line
if line.upcase =~ /^GROUP/
grouplit, groupinfo = line.split(".")
groupname, groupentries = groupinfo.split("=")
#{groupname} = groupname.to_a
groupname = groupentries.split
next
end # if GROUP
targetserver, command = line.split(" ")
if targetserver == @myhostname
@runcommand = true
end # if targetserver
#comment# In this case I'm trying to determine if "myhostname" is in the
array "web"
#comment# I've tried a number of ways to get the following to work without
success
if #{targetserver}.*include?* "#{@myhostname <%23%7B@myhostname>}"
####### THIS IS WHERE THE FAILURE IS
@runcommand = true
end # if
end
exit

2 Answers

Robert Dober

7/17/2008 1:39:00 PM

0

On Thu, Jul 17, 2008 at 3:15 PM, Victor Reyes <victor.reyes@gmail.com> wrote:
> Hello team,
>
> I am having an issue with the code below.
> Could you please take a quick look at the highlighted and commented code
> below and let me know what's wrong?
>
> Thank you
>
> Victor
>
>
> input.file
> group.was=hostname1 hostname.2 hostname.r3
> group.web=webserver1 webserver2 webserver3 hostname1 /usr/local/bin/test.sh
> web /usr/local/bin/testcmd.sh
> #end of input.file
>
> # Program
> @myhostname = `hostname` # webserver3
> #comment# The intent is to create a arrays "was" and "web" and to assign the
> values in the group statement
> IO.foreach("inpit.file") do |line|
> if line =~ /^#/ || line.chomp.length == 0
> next
> end # if line
> if line.upcase =~ /^GROUP/
> grouplit, groupinfo = line.split(".")
> groupname, groupentries = groupinfo.split("=")
> #{groupname} = groupname.to_a
> groupname = groupentries.split
> next
> end # if GROUP
> targetserver, command = line.split(" ")
> if targetserver == @myhostname
> @runcommand = true
> end # if targetserver
> #comment# In this case I'm trying to determine if "myhostname" is in the
> array "web"
> #comment# I've tried a number of ways to get the following to work without
> success
> if #{targetserver}.*include?* "#{@myhostname <%23%7B@myhostname>}"
> ####### THIS IS WHERE THE FAILURE IS
> @runcommand = true
> end # if
> end
> exit
>


Try to parse this code

if
@runcommand = true
end

Do you see what is wrong?
If not scroll down ;)


























The escape #{ works in string literals only, so you probably just
wanted to write

if targetserver.include? "#{@myhostname <%23%7B@myhostname>}"


I have no idea however what you meant with *.include?* (just high
lightening, I guess).

HTH
Robert


--
http://ruby-smalltalk.blo...

---
AALST (n.) One who changes his name to be further to the front
D.Adams; The Meaning of LIFF

Douglas A. Seifert

7/17/2008 1:43:00 PM

0

Victor Reyes wrote:
> Hello team,
>
> I am having an issue with the code below.
> Could you please take a quick look at the highlighted and commented code
> below and let me know what's wrong?
>
> Thank you
>
> Victor
>
>
> input.file
> group.was=hostname1 hostname.2 hostname.r3
> group.web=webserver1 webserver2 webserver3 hostname1 /usr/local/bin/test.sh
> web /usr/local/bin/testcmd.sh
> #end of input.file
>
> # Program
> @myhostname = `hostname` # webserver3
> #comment# The intent is to create a arrays "was" and "web" and to assign the
> values in the group statement
> IO.foreach("inpit.file") do |line|
> if line =~ /^#/ || line.chomp.length == 0
> next
> end # if line
> if line.upcase =~ /^GROUP/
> grouplit, groupinfo = line.split(".")
> groupname, groupentries = groupinfo.split("=")
> #{groupname} = groupname.to_a
> groupname = groupentries.split
> next
> end # if GROUP
> targetserver, command = line.split(" ")
> if targetserver == @myhostname
> @runcommand = true
> end # if targetserver
> #comment# In this case I'm trying to determine if "myhostname" is in the
> array "web"
> #comment# I've tried a number of ways to get the following to work without
> success
> if #{targetserver}.*include?* "#{@myhostname <%23%7B@myhostname>}"
> ####### THIS IS WHERE THE FAILURE IS
> @runcommand = true
> end # if
> end
> exit
>
>
Victor,

In ruby, a statement like

#{foo} = 'bar'

just won't work. You are trying to use "dynamic variables" (ala PHP I
guess) and that simply does not work in ruby. Here is a version of your
code that I think does what you are trying to do. I removed the @
sigils on the variable names ... you might need to add them back if you
took this code out of a class you are working on. I also stored the
group arrays in a ruby Hash object keyed by the group name. There are
other ways to do this, the best one depends on your specific needs. You
also had what looked to be a misspelling in the IO.foreach statement:
your version was opening 'inpit.file' not 'input.file'.

# Program
#@myhostname = `hostname` # webserver3
myhostname = 'webserver3'
runcommand = false
command_to_run = nil
#comment# The intent is to create a arrays "was" and "web" and to assign
the values in the group statement
groups = {}
IO.foreach("input.file") do |line|
if line =~ /^#/ || line.chomp.length == 0
next
end # if line
if line.upcase =~ /^GROUP/
grouplit, groupinfo = line.split(".")
groupname, groupentries = groupinfo.split("=")
groups[groupname] = groupentries.split
next
end # if GROUP
targetserver, command_to_run = line.split(" ")
if targetserver == myhostname
runcommand = true
end # if targetserver
#comment# In this case I'm trying to determine if "myhostname" is in the
array "web"
#comment# I've tried a number of ways to get the following to work
without success
end

if groups['web'].include?(myhostname)
####### THIS IS WHERE THE FAILURE IS
runcommand = true
end
puts "groups: #{groups.inspect}"
puts "run command: #{runcommand}, command: #{command_to_run}"
exit