[boulder.pm] FW: text extract

Jason Van Slyke jvanslyk at matchlogic.com
Wed Jul 25 18:37:33 CDT 2001


Justin,

I was thinking you might want to use an array to hold each input line and
set the array index on the start flag and examine each value of the array
after the end flag so you could truly keep track of every line between the
flags:

while (<>)
{
	if (/-/)
	{
		$index=0 ;
		next ;
	}
	else if (/;/)
	{
		foreach(@inray)
		{
			if (/NEEDLE/)
			{
				print NEWFILE @inray ;
				last ; # should jump out of foreach but stay
in the while (<>) loop;
			}
		}
	}

	$inray[$index] = $/ ;
	$index + 1 ;
}

Sorry, I'm at home and don't have my normal access to Learning Perl or the
CookBook so I might have screwed up  some of the syntax 'cause I don't get
to write nearly enough Perl. But I think the logic would work.

jvs
-----Original Message-----
From: Justin Crawford [mailto:Justin.Crawford at cusys.edu]
Sent: Wednesday, July 25, 2001 5:03 PM
To: 'boulder-pm-list at happyfunball.pm.org'
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