Gsup with variable when replacing

Hi people,

I’m trying to transform this kind of line :
123232321
FOOFOOFOO

2431232
BARBARBAR

to
123232321 (actually XML)
2431232
So I have coded this script
File.open(“D:/digisoft/1b.txt”,“r”) do |f2|
while line = f2.gets
f3 = line.gsub!(/\d+$/,’\1’)
puts f3
end
end

but Ruby doesn’t seem to apraciate … I search example and I found
that variable as $1, \1, &$ could do this job but i can’t get it
works.
How can I get the match of my regexp and add blocks please ?

thanks you

Romain LOMBARDO wrote:

f3 = line.gsub!(/\d+$/,’\1’)

\1 means “first group”, but there are no groups in your regex. \0 means
“whole
match”, so that’s the one you want.
Another thing: gsub! is the mutating variant of gsub. It will return nil
when
no change occurs or self when there is a change. Either way it does not
make
sense to store its return value.
And yet another thing: there is no sense in using gsub (as opposed to
sub)
with a regex that only matches once anyway.

HTH,
Sebastian

On Mon Jul 28 21:44:41 2008, Romain LOMBARDO wrote:

123232321 (actually XML)
that variable as $1, \1, &$ could do this job but i can’t get it
works.
How can I get the match of my regexp and add blocks please ?

thanks you

You’re missing the brackets around the \d+, like so:

f3 = line.gsub(/(\d+)$/,’\1’)

Note that I am also using String#gsub not String#gsub! as that will
change your line variable also.

On 28.07.2008 14:51, Sebastian H. wrote:

Romain LOMBARDO wrote:

f3 = line.gsub!(/\d+$/,’\1’)

\1 means “first group”, but there are no groups in your regex. \0 means “whole
match”, so that’s the one you want.

I wasn’t aware that \0 does the job as well. I always use & for the
whole match. Learn something new every day. :slight_smile:

Another thing: gsub! is the mutating variant of gsub. It will return nil when
no change occurs or self when there is a change. Either way it does not make
sense to store its return value.
And yet another thing: there is no sense in using gsub (as opposed to sub)
with a regex that only matches once anyway.

Absolutely.

Another remark, iterating through a file can be made easier:

File.foreach(“D:/digisoft/1b.txt”) do |line|
line.gsub!(/\d+$/,’\&’)
puts line
end

Kind regards

robert

On Jul 28, 5:42 pm, Romain LOMBARDO [email protected] wrote:

123232321 (actually XML)
2431232
So I have coded this script
File.open(“D:/digisoft/1b.txt”,“r”) do |f2|
while line = f2.gets
f3 = line.gsub!(/\d+$/,’\1’)
puts f3
end
end

while line = f2.gets
print ‘’,line.to_i,’’,"\n" if line=~/\d/
end

  • I am not sure if this is perfect solution, but this works and prints
    what you expected.

Thanks,
sathyz

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