# Nuby question - printing substring as non-ASCII

I’m reading in a string of numbers, as follows:

" 1 45.3456 "

How do I write out the first non-whitespace element as a number? Ruby
wants to express as it in ASCII, and the .to_i method doesn’t seem to
work on a substring.

TPL

Thomas L. wrote:

I’m reading in a string of numbers, as follows:

" 1 45.3456 "

How do I write out the first non-whitespace element as a number? Ruby
wants to express as it in ASCII, and the .to_i method doesn’t seem to
work on a substring.

Also, the following works for me:

irb(main):009:0> " 1 45.3456 ".strip.split(/\s+/).map { |i|
i.to_i
}
=> [1, 45]

(Of course, to_i coerces to integers, so the body of the map block would
have to be more complicated to get floats too.)

David V.

Thomas L. wrote:

TPL

Posted via http://www.ruby-forum.com/.

irb(main):001:0> " 1 45.3456 ".strip.to_i()
=> 1

Dmitry B. wrote:

Then why not call to_i on a whole string?

" 1 45.3456 ".to_i
" 1 45.3456 ".to_f

It will find the first number and convert it to Fixnum or Float.

Dmitry
You’re absolutely right, Dmitry… .strip() is not necessary. But I
tend to be a bit anal-retentive about such things :o|

Then why not call to_i on a whole string?

" 1 45.3456 ".to_i
" 1 45.3456 ".to_f

It will find the first number and convert it to Fixnum or Float.

Dmitry

Thomas L. wrote:

I’m reading in a string of numbers, as follows:

" 1 45.3456 "

How do I write out the first non-whitespace element as a number? Ruby
wants to express as it in ASCII, and the .to_i method doesn’t seem to
work on a substring.

TPL

Thanks. Dumb question, but I’m kinda deep in the throes of the “suck”
stage of learning Ruby. The following also seems to work (at least for
the purposes of reading in and writing formatted output):

irb(main):001:0> string=" 1 45.3456 "
=> " 1 45.3456 "

irb(main):003:0> string.strip
=> “1 45.3456”

irb(main):004:0> string.split[1]
=> “45.3456”

irb(main):005:0> string.split[0]
=> “1”

Hi –

On Sat, 18 Nov 2006, Wilson B. wrote:

Here is one way:

substrings.first is the same as substrings[0]

Another possibility:

irb(main):001:0> require ‘scanf’
=> true
irb(main):002:0> string = " 1 45.3456 "
=> " 1 45.3456 "
irb(main):003:0> string.scanf("%d")
=> [1]

You have to get it out of the array, but you don’t have to convert it

David

----- Original Message -----
From: “Patrick S.” [email protected]
To: “ruby-talk ML” [email protected]
Sent: Friday, November 17, 2006 9:45 AM
Subject: Re: Nuby question - printing substring as non-ASCII

TPL

Posted via http://www.ruby-forum.com/.

irb(main):001:0> " 1 45.3456 ".strip.to_i()
=> 1

no need to strip
" 1 45.3456".to_i
=> 1

On 11/17/06, Thomas L. [email protected] wrote:

irb(main):003:0> string.strip
=> “1 45.3456”

irb(main):004:0> string.split[1]
=> “45.3456”

irb(main):005:0> string.split[0]
=> “1”

Here is one way:
irb(main):001:0> string = " 1 45.3456 "
=> " 1 45.3456 "
irb(main):002:0> substrings = string.scan /[^\s]+/
=> [“1”, “45.3456”]
irb(main):003:0> substrings.first.to_i
=> 1

The second line of code is saying: Scan the string, and return an
Array of strings that were made up of one or more non-whitespace
characters.

substrings.first is the same as substrings[0]

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.