[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

gsub-ing each character

Michael Linfield

9/27/2007 5:19:00 PM

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!
--
Posted via http://www.ruby-....

4 Answers

yermej

9/27/2007 6:43:00 PM

0

On Sep 27, 12:18 pm, Michael Linfield <globyy3...@hotmail.com> wrote:
> 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!
> --
> Posted viahttp://www.ruby-....

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

yermej

9/27/2007 6:47:00 PM

0

On Sep 27, 1:43 pm, "yer...@gmail.com" <yer...@gmail.com> 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?

> Jeremy


yermej

9/27/2007 6:50:00 PM

0

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

Michael Linfield

9/27/2007 7:35:00 PM

0

yermej@gmail.com 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.

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