[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Ruby with regular expression

peppermonkey

11/22/2006 12:28:00 AM

Hi,
I'm new to Ruby (and Regular expressions in general) and as such,
this is rather a newbie question but I'm trying to write a script in
Ruby to open a file and do some string manipulation.
Basically I'm getting hung up with regular expressions.
Suppose there is a file that contains, among other lines, lines of the
following structure.

"This [1234567890] points to [0987654321]"

Assume the line structure (words, spaces etc.) stay constant.
The actual numbers (within the brackets) are not constant.
There is always 10 numbers within the brackets.
There are other lines that have numbers enclosed by '[',']' that must
be left alone.

How can you replace only those numbers in the above structure to
"xxxxxxxxxx"?
Openning a file, searching the file, writing to the file I'm presuming
is simple but the expression to identify and then replace those numbers
are giving me problems. Any help would be greatly appreciated.

Thank you.

6 Answers

Paul Lutus

11/22/2006 12:39:00 AM

0

peppermonkey wrote:

> Hi,
> I'm new to Ruby (and Regular expressions in general) and as such,
> this is rather a newbie question but I'm trying to write a script in
> Ruby to open a file and do some string manipulation.
> Basically I'm getting hung up with regular expressions.
> Suppose there is a file that contains, among other lines, lines of the
> following structure.
>
> "This [1234567890] points to [0987654321]"
>
> Assume the line structure (words, spaces etc.) stay constant.
> The actual numbers (within the brackets) are not constant.
> There is always 10 numbers within the brackets.
> There are other lines that have numbers enclosed by '[',']' that must
> be left alone.

What distinguishes the lines you _do_ want to change from the ones you
_don't_ want to change? You don't say. Do all of them have ten digits?

> How can you replace only those numbers in the above structure to
> "xxxxxxxxxx"?
> Openning a file, searching the file, writing to the file I'm presuming
> is simple

You're presuming? Why not open and read the file to find out whether it is
simple or not? That will give you more confidence to forge ahead with the
more interesting parts of your project.

> but the expression to identify and then replace those numbers
> are giving me problems.

What problems? Please post your code and explain what went wrong.

> Any help would be greatly appreciated.

Not tested, but something like:

data.sub!(%r{\[(.*?)\]},"12345")

--
Paul Lutus
http://www.ara...

peppermonkey

11/22/2006 12:54:00 AM

0


> What distinguishes the lines you _do_ want to change from the ones you
> _don't_ want to change? You don't say. Do all of them have ten digits?
>
> > How can you replace only those numbers in the above structure to
> > "xxxxxxxxxx"?
> > Openning a file, searching the file, writing to the file I'm presuming
> > is simple
> You're presuming?

Sorry, should have made it clearer.
The lines that I do want changed has the exact structure of

"This [] points to []"

with exactly 10 digits inside the brackets.
There are no other lines with that structure.
There are however, other lines that have numbers enclosed by the square
brackets and they are to remain untouched.

Not at home right now so will have to wait till then to work on it.

Thanks

Paul Lutus

11/22/2006 1:05:00 AM

0

peppermonkey wrote:

>
>> What distinguishes the lines you _do_ want to change from the ones you
>> _don't_ want to change? You don't say. Do all of them have ten digits?
>>
>> > How can you replace only those numbers in the above structure to
>> > "xxxxxxxxxx"?
>> > Openning a file, searching the file, writing to the file I'm presuming
>> > is simple
>> You're presuming?
>
> Sorry, should have made it clearer.
> The lines that I do want changed has the exact structure of
>
> "This [] points to []"
>
> with exactly 10 digits inside the brackets.
> There are no other lines with that structure.
> There are however, other lines that have numbers enclosed by the square
> brackets and they are to remain untouched.

You really should show clearly how the target lines differ from the
non-target lines. Your computer can't turn your prose description into
working code. Neither can I.

> Not at home right now so will have to wait till then to work on it.

In that case, the solution I posted earlier will work with some small
changes. But the changes depend on what you haven't said.

--
Paul Lutus
http://www.ara...

William James

11/22/2006 1:42:00 AM

0

peppermonkey wrote:
> Hi,
> I'm new to Ruby (and Regular expressions in general) and as such,
> this is rather a newbie question but I'm trying to write a script in
> Ruby to open a file and do some string manipulation.
> Basically I'm getting hung up with regular expressions.
> Suppose there is a file that contains, among other lines, lines of the
> following structure.
>
> "This [1234567890] points to [0987654321]"
>
> Assume the line structure (words, spaces etc.) stay constant.
> The actual numbers (within the brackets) are not constant.
> There is always 10 numbers within the brackets.
> There are other lines that have numbers enclosed by '[',']' that must
> be left alone.
>
> How can you replace only those numbers in the above structure to
> "xxxxxxxxxx"?
> Openning a file, searching the file, writing to the file I'm presuming
> is simple but the expression to identify and then replace those numbers
> are giving me problems. Any help would be greatly appreciated.
>
> Thank you.

This will modify the original file and create a backup file.
(And it should be a single line.)

ruby -i.bak -pe"sub(/This \[\d{10}\] points to \[\d{10}\]/, 'This
[xxxxxxxxxx] points to [yyyyyyyyyy]')" myfile

peppermonkey

11/22/2006 4:54:00 AM

0


William James wrote:
> peppermonkey wrote:
> > Hi,
> > I'm new to Ruby (and Regular expressions in general) and as such,
> > this is rather a newbie question but I'm trying to write a script in
> > Ruby to open a file and do some string manipulation.
> > Basically I'm getting hung up with regular expressions.
> > Suppose there is a file that contains, among other lines, lines of the
> > following structure.
> >
> > "This [1234567890] points to [0987654321]"
> >
> > Assume the line structure (words, spaces etc.) stay constant.
> > The actual numbers (within the brackets) are not constant.
> > There is always 10 numbers within the brackets.
> > There are other lines that have numbers enclosed by '[',']' that must
> > be left alone.
> >
> > How can you replace only those numbers in the above structure to
> > "xxxxxxxxxx"?
> > Openning a file, searching the file, writing to the file I'm presuming
> > is simple but the expression to identify and then replace those numbers
> > are giving me problems. Any help would be greatly appreciated.
> >
> > Thank you.
>
> This will modify the original file and create a backup file.
> (And it should be a single line.)
>
> ruby -i.bak -pe"sub(/This \[\d{10}\] points to \[\d{10}\]/, 'This
> [xxxxxxxxxx] points to [yyyyyyyyyy]')" myfile

Thank you!
Looking at the solution makes me feel dumb. Should have come up with
that. Wasn't thinking simple enough. So yes, this is exactly what I was
looking for. Thanks! Greatly appreciated!

Hubert

Gregory Seidman

11/25/2006 5:52:00 PM

0

On Sat, Nov 25, 2006 at 04:48:01AM +0900, peppermonkey wrote:
} Hi,
} I'm new to Ruby (and Regular expressions in general) and as such,
} this is rather a newbie question but I'm trying to write a script in
} Ruby to open a file and do some string manipulation.
} Basically I'm getting hung up with regular expressions.
} Suppose there is a file that contains, among other lines, lines of the
} following structure.
}
} "This [1234567890] points to [0987654321]"
}
} Assume the line structure (words, spaces etc.) stay constant.
} The actual numbers (within the brackets) are not constant.
} There is always 10 numbers within the brackets.
} There are other lines that have numbers enclosed by '[',']' that must
} be left alone.
}
} How can you replace only those numbers in the above structure to
} "xxxxxxxxxx"?
} Openning a file, searching the file, writing to the file I'm presuming
} is simple but the expression to identify and then replace those numbers
} are giving me problems. Any help would be greatly appreciated.

It sounds to me like you are trying to substitute strings by reference,
similar to localization. Based on that, I am assuming that you have a hash
somewhere that maps these ten-digit numbers to the strings that should
replace them. In that case, what you want is something like this:

str.gsub(/\[(\d+)\]/) { hash[$1.to_i] }

} Thank you.
--Greg