From: Robert Klemme Date: 2009-01-13T04:44:17+09:00 Subject: Re: Data stream variables 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 > 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