From: Amishera Amishera on 31 Mar 2010 18:07 I have strings of this form: s = 'C#039;era una volta il east' I want to replace '#039;' with the octal representation of 39 ie 47 so the string becomes s = 'C\47era una volta il east' I have tried this: 1 def conv_char(num) 2 puts num.to_i.to_s(8) 3 num.to_i.to_s(8) 4 end 5 6 if __FILE__ == $0 7 s = 'C#039;era' 8 s.gsub!(/#(\d+);/, conv_char("\1")) 9 puts s 10 end The outptu i get is 0 'C#0era una volta il east' I even tried 8 s.gsub!(/#(\d+);/, conv_char('\1')) 8 s.gsub!(/#(\d+);/, conv_char($1)) nothing seems to work. how to solve this gracefully? I guess I can do that using double replacement like collecting the matched patterns (#039;) using scan method and then converting and doing another gsub using a for loop. But that seems to much for the poor regular expression engine. -- Posted via http://www.ruby-forum.com/.
From: Amishera Amishera on 31 Mar 2010 18:11 Amishera Amishera wrote: > I have strings of this form: > > s = 'C#039;era una volta il east' > > I want to replace '#039;' with the octal representation of 39 ie 47 so > the string becomes > > s = 'C\47era una volta il east' > > I have tried this: > > 1 def conv_char(num) > 2 puts num.to_i.to_s(8) > 3 num.to_i.to_s(8) > 4 end > 5 > 6 if __FILE__ == $0 > 7 s = 'C#039;era' > 8 s.gsub!(/#(\d+);/, conv_char("\1")) > 9 puts s > 10 end > > The outptu i get is > 0 > 'C#0era una volta il east' > > I even tried > 8 s.gsub!(/#(\d+);/, conv_char('\1')) > 8 s.gsub!(/#(\d+);/, conv_char($1)) > > nothing seems to work. > > how to solve this gracefully? I guess I can do that using double > replacement like collecting the matched patterns (#039;) using scan > method and then converting and doing another gsub using a for loop. But > that seems to much for the poor regular expression engine. I can do this also: s.gsub!(/#(\d+);/) { puts $1; conv_char($1) } But I was wondering how to use both the \1 syntax and the function call together in the gsub call in the first approach. -- Posted via http://www.ruby-forum.com/.
From: Amishera Amishera on 31 Mar 2010 18:28 Amishera Amishera wrote: > I can do this also: > > s.gsub!(/#(\d+);/) { puts $1; conv_char($1) } > > But I was wondering how to use both the \1 syntax and the function call > together in the gsub call in the first approach. Okay it did solve half of the problem. Other half is how to display a '\' infront. s.gsub!(/#(\d+);/) { '\'+$1.to_i.to_s(8)} is giving some compile error. -- Posted via http://www.ruby-forum.com/.
From: David Springer on 31 Mar 2010 19:47 [Note: parts of this message were removed to make it a legal post.] On Wed, Mar 31, 2010 at 6:13 PM, Max Schmidt < max.schmidt.privat(a)googlemail.com> wrote: > >s.gsub!(/#(\d+);/) { '\'+$1.to_i.to_s(8)} > > >is giving some compile error. > > You have to escape the slash (\) like this > > >s.gsub!(/#(\d+);/) { '\\'+$1.to_i.to_s(8)} > -- > Posted via http://www.ruby-forum.com/. > > try either of these: s.gsub!(/#(\d+);/, "\134\134#{conv_char($)}") s.gsub!(/#(\d+);/, "\134\134#{$1.to_i.to_s(8)}") -- David
From: David Springer on 31 Mar 2010 20:29 OK I was wrong. This does work. s.gsub!(/#(\d+);/) { '\\'+$1.to_i.to_s(8)} What I offered does not. -- Posted via http://www.ruby-forum.com/.
|
Next
|
Last
Pages: 1 2 Prev: stetecting change in number of leading spaces while looping Next: socket programming...lsof? |