# How to convert string into number

Hi all,

I read several rows of numbers and split each row into an array. I get
an array of array. By default Ruby treat each number as a string. I want
to convert each string into a number. The only way I can think of is to
loop through the old array of array, change each element in each row
using #to_f and put them back into a new array. It is not efficient.
What other options might be better?

Thanks,

Li

# file format

1 100 33 32
2 500 33 20

Hi,

i would do it like this:

array = []

yourfile.each_line{|line| array << line.split(’ ').collect(|item|
item.to_f)}

Cheers
detlef

Am Freitag, den 06.07.2007, 07:36 +0900 schrieb Guest:

From: “Guest” [email protected]

Li

# file format

1 100 33 32
2 500 33 20

One way would be to use #map:

irb(main):013:0> rows = [[“1”, “100”, “33”, “32”], [“2”, “500”, “33”,
“20”]]
=> [[“1”, “100”, “33”, “32”], [“2”, “500”, “33”, “20”]]

irb(main):014:0> rows.each {|row| row.map! {|c| c.to_f} }
=> [[1.0, 100.0, 33.0, 32.0], [2.0, 500.0, 33.0, 20.0]]

You could also use #to_i if you wanted integers.

Hope this helps,

Bill

Hi –

On Fri, 6 Jul 2007, Guest wrote:

Li

# file format

1 100 33 32
2 500 33 20

You could do:

require ‘scanf’
File.open(“filename”) do |fh|
fh.scanf("%f%f%f%f") {|n| n }
end

The point of the {|n| n} is to force a capture of each set of numbers,
using the block form of scanf. If you’re not sure how many numbers
are on each line, you’d have to do a little more work but scanf might
still be a good option.

David