Robert Klemme
1/12/2009 7:45:00 PM
On 12.01.2009 20:33, Andrew Timberlake wrote:
> [Note: parts of this message were removed to make it a legal post.]
>
> On Mon, Jan 12, 2009 at 9:14 PM, Robert Klemme
> <shortcutter@googlemail.com>wrote:
>
>> On 12.01.2009 14:21, Alain Helfenstein wrote:
>>
>>> I want to print all lines wihtch contains the string "Open" from a bunch
>>> of 'xml' files. Additionally I want to print the filename and the line
>>> number of the match.
>>>
>>> The problem with the following snippet is, that the variable '$.' does
>>> not reset the line number at the beginning of a new file.
>>>
>>> That menas, the printed file numbers are not correct except for the
>>> first file of '*.xml'
>>>
>>> ruby -n -e 'puts ($FILENAME + " " + $..to_s + "" + $_) if /Open/' *.xml
>>>
>>> Does anybody have a idea, on how to print the correct line number?
>>>
>>> Thanks a lot for your answer, Alain.
>>>
>> I'm not Alain, but... :-) Just kidding.
>>
>> Here's how to do it:
>>
>> ruby -ne 'puts "#$FILENAME #$. #$_" if /Open/; $.=0 if ARGF.eof?' *.xml
>>
> I was wondering if you could reset the line counter but didn't think of just
> setting $. = 0
IMHO the tricky bit is to know *when* to reset, i.e. to know that
ARGF#eof? signals the end of a single file and not all files. :-)
> Sometimes ruby is just too easy :-) I still sometimes think things need to
> be more complicated.
:-) The other area where I simplified your piece of code is the string
handling. Btw, when String interpolation (i.e. #$GLOBAL or #{expr}) you
do not need the explicit to_s.
Kind regards
robert
--
remember.guy do |as, often| as.you_can - without end