How to Convert String to Array

S

Shengzhi Li

Hey everyone,

Newb question: I want to read the user input an array of numbers. Is
this possible? If not, then I want to convert the string input (from
gets) into an array.

For example:

user inputs [5,3,46,6,5]
gets.chomp converts this to a string "[5,3,46,6,5]"
I want [5,3,46,6,5] (the arrray, not the string)

Any help would be greatly appreciated.

Thanks,

~sphoenixee~
 
R

rmagick

Hey everyone,

Newb question: I want to read the user input an array of numbers. Is
this possible? If not, then I want to convert the string input (from
gets) into an array.

For example:

user inputs [5,3,46,6,5]
gets.chomp converts this to a string "[5,3,46,6,5]"
I want [5,3,46,6,5] (the arrray, not the string)

Any help would be greatly appreciated.

Thanks,

~sphoenixee~

irb(main):017:0> x = '[5,3,46,6,5]'
=> "[5,3,46,6,5]"
irb(main):018:0> y = x[1..-2].split(',').collect! {|n| n.to_i}
=> [5, 3, 46, 6, 5]
irb(main):019:0>

1. x[1..-2] is the string without the brackets.
2. split(',') splits the string at commas into an array of strings.
3. collect! calls .to_i on each string in the array and replaces the
string with the result of the conversion.
 
D

Daniel

Hey everyone,

Newb question: I want to read the user input an array of numbers. Is
this possible? If not, then I want to convert the string input (from
gets) into an array.

For example:

user inputs [5,3,46,6,5]
gets.chomp converts this to a string "[5,3,46,6,5]"
I want [5,3,46,6,5] (the arrray, not the string)

a = "[5,3,46,6,5]"
a.gsub!(/[\[\]]/,'').split(/\s*,\s*/)
=> ["5", "3", "46", "6", "5"]

This removes the [] first, then splits on ,

-d
 
D

Daniel

Hey everyone,

Newb question: I want to read the user input an array of numbers. Is
this possible? If not, then I want to convert the string input (from
gets) into an array.

For example:

user inputs [5,3,46,6,5]
gets.chomp converts this to a string "[5,3,46,6,5]"
I want [5,3,46,6,5] (the arrray, not the string)

a = "[5,3,46,6,5]"
a.gsub!(/[\[\]]/,'').split(/\s*,\s*/)
=> ["5", "3", "46", "6", "5"]

This removes the [] first, then splits on ,

missed the collect as mentioned in the other response.

--
"You will never know how much it has cost my generation to preserve your
freedom. I hope you will make good use of it." -- John Quincy Adams

"Yes, we did produce a near-perfect republic. But will they keep it? Or will
they, in the enjoyment of plenty, lose the memory of freedom? Material
abundance without character is the path of destruction." -- Thomas Jefferson
 
P

Paul Stickney

require 'yaml'
some_obj = YAML.load(gets.chomp) rescue nil

If your input is "[1,2,3,4]" then it will return an array with 4
elements of 1, 2, 3 and 4, respectively. Of course, you could input
any valid (or not so valid) YAML and get back a String or Hash or....
The rescue is just to ensure we get a nil instead of an error on
really bad input.

Enjoy,
Paul
 
P

Phrogz

Hey everyone,

Newb question: I want to read the user input an array of numbers. Is
this possible? If not, then I want to convert the string input (from
gets) into an array.

For example:

user inputs [5,3,46,6,5]
gets.chomp converts this to a string "[5,3,46,6,5]"
I want [5,3,46,6,5] (the arrray, not the string)

irb(main):001:0> s = "[5,3,46,6,5]"
=> "[5,3,46,6,5]"
irb(main):002:0> a = s.scan( /\d+/ )
=> ["5", "3", "46", "6", "5"]
irb(main):003:0> a.map!{ |s| s.to_i }
=> [5, 3, 46, 6, 5]
 
O

Olivier Renaud

Le samedi 24 mars 2007 00:20, Paul Stickney a =C3=A9crit=C2=A0:
require 'yaml'
some_obj =3D YAML.load(gets.chomp) rescue nil

If your input is "[1,2,3,4]" then it will return an array with 4
elements of 1, 2, 3 and 4, respectively. Of course, you could input
any valid (or not so valid) YAML and get back a String or Hash or....
The rescue is just to ensure we get a nil instead of an error on
really bad input.

Enjoy,
Paul

I didn't know that yaml can contain bracketed arrays like this. However, yo=
ur=20
code seems to work only if there are spaces along with the comas :

irb(main):012:0> YAML.load("[1, 2, 3]")
=3D> [1, 2, 3]

but

irb(main):013:0> YAML.load("[1,2,3]")
=3D> [123]


=2D-=20
Olivier Renaud
 
S

Shengzhi Li

Wow, I never knew there'd be so many ways to do it! Thanks so much to
all who replied! I really appreciate it.

sphoenixee
 
P

Paul Stickney

Thanks for the correction Olivier, you are indeed correct.
I didn't realize the whitespace made a difference :-/
 
J

James Edward Gray II

Newb question: I want to read the user input an array of numbers. Is
this possible?

Sure:

$ ruby -rubygems read_array.rb
Enter some numbers:
1
2
3

You entered: [1, 2, 3]
$ cat read_array.rb
#!/usr/bin/env ruby -w

require "highline/import"

array = ask("Enter some numbers:", lambda { |n| Integer(n) rescue
n }) do |q|
q.gather = String.new
end
puts "You entered: #{array.inspect}"

__END__

Hope that helps.

James Edward Gray II
 

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

Staff online

Members online

Forum statistics

Threads
474,238
Messages
2,571,194
Members
47,829
Latest member
Jesus_Freak

Latest Threads

Top