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.

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

| Privacy Policy | Terms of Service | Remote Ruby Jobs