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/.
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/\.
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/\.
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)}")
···
On Wed, Mar 31, 2010 at 6:13 PM, Max Schmidt < max.schmidt.privat@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/\.
--
David
s.gsub!(/#(\d+);/, "\134\134#{conv_char($)}")
I meant:
s.gsub!(/#(\d+);/, "\134\134#{conv_char($1)}")
I'm having trouble doing copy & paste from irb under windows.
David
···
--
Posted via http://www.ruby-forum.com/\.
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/.