how to convert string into number

G

Guest

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

....
 
D

Detlef Reichl

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:
 
B

Bill Kelly

From: "Guest said:
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

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
 
D

dblack

Hi --

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

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

--
* Books:
RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242)
RUBY FOR RAILS (http://www.manning.com/black)
* Ruby/Rails training
& consulting: Ruby Power and Light, LLC (http://www.rubypal.com)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top