Gsub-ing each character

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

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!

On Sep 27, 12:18 pm, Michael L. [email protected] wrote:

Thanks!

Posted viahttp://www.ruby-forum.com/.

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

On Sep 27, 1:43 pm, “[email protected][email protected] wrote:

Oops…made a couple mistakes in the assignment (or lack thereof):

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?

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

[email protected] wrote:

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.