I read a file in the following format,extract the second column only,
and push them into an array. My problem is that Ruby reads them as
strings(based on array.inspect) but not as numbers so it is impossible
for me to do the calculation. Any comments?
#puts array.inspect
array.each_slice(3){|slice|
average=(slice[0]+slice[1]+slice[2])/(3.0)
puts average
}
###output from screen
C:/Ruby/self/file6.rb:8: undefined method `/' for "123":String
(NoMethodError)
from
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`each_slice'
from C:/Ruby/self/file6.rb:7:in `each'
from C:/Ruby/self/file6.rb:7:in `each_slice'
from C:/Ruby/self/file6.rb:7
You need to tell Ruby to coerce the strings into integers.
array =
File.open('array.text') do |file|
file.each_line do |line|
array << line.split[1].to_i
end
end
array.each_slice(3) do |triplet|
average = (slice[0]+slice[1]+slice[2])/3.0
puts average
end
···
On 10/20/06, Li Chen <chen_li3@yahoo.com> wrote:
Hi folks,
I read a file in the following format,extract the second column only,
and push them into an array. My problem is that Ruby reads them as
strings(based on array.inspect) but not as numbers so it is impossible
for me to do the calculation. Any comments?
#puts array.inspect
array.each_slice(3){|slice|
average=(slice[0]+slice[1]+slice[2])/(3.0)
puts average
}
###output from screen
C:/Ruby/self/file6.rb:8: undefined method `/' for "123":String
(NoMethodError)
from
c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`each_slice'
from C:/Ruby/self/file6.rb:7:in `each'
from C:/Ruby/self/file6.rb:7:in `each_slice'
from C:/Ruby/self/file6.rb:7
18:12:44 [Temp]: cat data
A 1 B
A 2 B
A 3 B
A 4 B
A 5 B
A 6 B
18:13:18 [Temp]: ruby -aF\\t -n -r enumerator -e 'BEGIN{$a=}; $a<<$F[1].to_i; END{ $a.each_slice(3){|sl| p sl.inject(0){|a,b|a+b}/3.0}}' data
2.0
5.0
18:13:34 [Temp]:
Kind regards
robert
···
On 20.10.2006 17:25, Li Chen wrote:
Hi folks,
I read a file in the following format,extract the second column only, and push them into an array. My problem is that Ruby reads them as strings(based on array.inspect) but not as numbers so it is impossible for me to do the calculation. Any comments?
#puts array.inspect
array.each_slice(3){|slice|
average=(slice[0]+slice[1]+slice[2])/(3.0)
puts average
}
###output from screen
C:/Ruby/self/file6.rb:8: undefined method `/' for "123":String (NoMethodError)
from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `each_slice'
from C:/Ruby/self/file6.rb:7:in `each'
from C:/Ruby/self/file6.rb:7:in `each_slice'
from C:/Ruby/self/file6.rb:7