Robert Klemme
10/20/2006 4:16:00 PM
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?
>
> Thanks,
>
> Li
>
> ###filen name: array.text
>
>
> A 1 B
> A 2 B
> A 3 B
> A 4 B
> A 5 B
> A 6 B
>
> ..
>
> ###script
>
> equire 'enumerator'
>
> array=Array.new
>
> File.open('array.text').each{|line| array<<line.split(/\t/)[1]}
>
> #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
This can be done by an awk style 1liner :-)
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