[boulder.pm] FW: text extract

Jessee Porter porterje at us.ibm.com
Thu Jul 26 07:25:13 CDT 2001


Hi, Justin.

If you know that your end of record delimiter is always going to be a lone
semi-colon, I'd do
something similar to, the following. Changing $/ to semi-colon + newline
ensures that we
read one record at a time...

{
    local $/=";\n";
    while (<FH>) {
        print $_,"\n" if /NEEDLE!/;
    }
}

Some people have also mentioned reading the entire file into an array or
scalar, which is fine, too.
TIMTOWDI and all. Be careful of doing this on exceptionally large files,
though, as perl will eat all
your memory.

     regards,
     Jesse Porter

Justin Crawford <Justin.Crawford at cusys.edu>@pm.org on 07/25/2001 05:02:38
PM

Please respond to boulder-pm-list at happyfunball.pm.org

Sent by:  owner-boulder-pm-list at pm.org


To:   "'boulder-pm-list at happyfunball.pm.org'"
      <boulder-pm-list at happyfunball.pm.org>
cc:
Subject:  RE: [boulder.pm] FW: text extract



Thanks Chip.  My first example was misleading.  It's more like:

-
haystack
haystack
haystack
;

-
haystack
haystack
NEEDLE!
haystack
;

Still, I can see how that first solution could do it; I'll make that one
go.
I was thinking there must be some way to do it using the range operators
(...) in combination with another pattern match, or using undef $/, but I
can't figure that way out if it exists.  Probably I'm trying too hard to be
superelite and not trying hard enough to get the thing writ...

Justin

-----Original Message-----
From: Chip Atkinson [mailto:chip at rmpg.org]
Sent: Wednesday, July 25, 2001 3:50 PM
To: 'boulder-pm-list at happyfunball.pm.org'
Subject: Re: [boulder.pm] FW: text extract


While perhaps not the best way, here's a way at least

$start_looking = 0;

while (<>)
{
   if (/2a/)
   {
     $start_looking = 1;
     next;
   }

   if ($start_looking && /NEEDLE/)
   {
     print ("Found it\n");
     exit;
   }
}

Another possibility is to read in the entire file in slurp mode and look
for a pattern like /2a.*NEEDLE.*/.

Chip

On Wed, 25 Jul 2001, Justin Crawford wrote:

> Whoa, got ahead of myself there...
>
> I'm trying to extract multiple lines of data from a text file, only if
one
> of the lines contains a string.  Picture a file like so:
>
> 1a
> haystack
> haystack
> haystack
> haystack
> 1b
>
> 2a
> haystack
> haystack
> NEEDLE!!!
> haystack
> 2b
>
> I want to cruise the text file getting every chunk that's like the one
from
> 2a to 2b.
>
> What's the best way?
>
> Thanks!
>
> Justin Crawford
> Oracle DBA Team
> University of Colorado Management Systems
> 303-492-9083
>






More information about the Boulder-pm mailing list