gsub-ing each character

M

Michael Linfield

I want to convert certain letters to numbers on a gets.chomp..
my initial approach was this----

words = gets.chomp
new = words.each {|p| p.gsub(/[h]/, '00')}

puts new

#####
however this doesnt work the miracle :)

new = words.gsub(/[h]/, '00')

puts new

##### this works perfectly, but the problem occurs if i want to gsub
more than one character as if i have new = another.gsub then puts new
only outputs the last gsub.

Ideas?

Thanks!
 
Y

yermej

I want to convert certain letters to numbers on a gets.chomp..
my initial approach was this----

words = gets.chomp
new = words.each {|p| p.gsub(/[h]/, '00')}

puts new

#####
however this doesnt work the miracle :)

new = words.gsub(/[h]/, '00')

puts new

##### this works perfectly, but the problem occurs if i want to gsub
more than one character as if i have new = another.gsub then puts new
only outputs the last gsub.

Ideas?

Thanks!

Normally, you'd use String#tr for something like this, but since you
want to replace single characters with multiple characters, you might
try something like this:

subs = {
'h' => '00',
'i' => '01',
'j' => '02',
}

new = gets.chomp

subs.inject(new) {|acc, sub| acc.gsub(sub[0], sub[1])} unless new.nil?

For something more similar to what you're already doing, you can chain
the #gsub calls together:

new.gsub('h', '00').gsub('i', '01').gsub('j', '02') unless new.nil?

This may or may not run faster than my first solution, but the first
is easier to code/maintain.

Jeremy
 
Y

yermej

subs = {
'h' => '00',
'i' => '01',
'j' => '02',

}
words = gets.chomp
new = subs.inject(words) {|acc, sub| acc.gsub(sub[0], sub[1])} unless
new.nil?

or:

words = gets.chomp
new = words.gsub('h', '00').gsub('i', '01').gsub('j', '02') unless
new.nil?
 
Y

yermej

Sorry, more mistakes. I'm giving up after this.

subs = {
'h' => '00',
'i' => '01',
'j' => '02',
}

words = gets.chomp
new = subs.inject(words) {|acc, sub| acc.gsub(sub[0], sub[1])} unless
words.nil?

or:

words = gets.chomp
new = words.gsub('h', '00').gsub('i', '01').gsub('j', '02') unless
words.nil?

Hopefully that's right.

Jeremy
 
M

Michael Linfield

Sorry, more mistakes. I'm giving up after this.

subs = {
'h' => '00',
'i' => '01',
'j' => '02',
}

words = gets.chomp
new = subs.inject(words) {|acc, sub| acc.gsub(sub[0], sub[1])} unless
words.nil?

or:

words = gets.chomp
new = words.gsub('h', '00').gsub('i', '01').gsub('j', '02') unless
words.nil?

Hopefully that's right.

Jeremy

Haha no worries, thanks a ton -- didnt know you could chain gsubs but
now i think ill go with the inject method cause yes you were right when
you talked about maintaining it.
 

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

Forum statistics

Threads
474,264
Messages
2,571,336
Members
48,014
Latest member
saradhi

Latest Threads

Top