perlyr has asked for the wisdom of the Perl Monks concerning the following question:

Hi guys,

I want to write a loop and do the following: 1) first, find keyword "Intel". 2) second, extract 2 lines. 3) then match "Dell". 4) contiue this loop until it finds "Dell" and then stop.

Below is a sample of the text file.

Thanks
my $str = <<STR; ended June 30, 2001 in conformity with accounting principles generall + Intel +y accepted in the United States of America. Also in our opinion, the related fina +ncial statement schedule, when considered in relation to the basic consolida + +ted in the United States of America. Also in our opinion, the related fina +ncial statement schedule, when considered in relation to the basic consolida + Intel in the United States of America. Also in our opinion, the related fina +ncial Dell in the United States of America. Also in our opinion, the related fina +ncial statement schedule, when considered in relation to the basic consolida + Intel dell financial statements taken as a whole, presents fairly, in all materia +l respects, the information set forth therein. Melville, New York September 26, 2001 STR Update: my($block, @block, $catch, $count); my $keyword = 'Intel'; do { (@block) = $str =~ /($keyword(?:[^\n]*\n){1,3})/img; foreach $block(@block){ ($catch) = $block =~ /(dell)/ig; } } until ($catch =~ /\w+/); print OUT "$keyword\t"; print OUT "$catch\n"; exit; close OUT;

Replies are listed 'Best First'.
Re: Write a Loop
by SuicideJunkie (Vicar) on Jul 19, 2012 at 19:37 UTC
Re: Write a Loop
by ww (Archbishop) on Jul 20, 2012 at 01:13 UTC
    Did you include your code inside <hideme> ...( code here)... </hideme> tags?

    What part of writing a loop has you stumped.... or is it the part where you're expected to show that you've actually made an attempt to answer your own question?

      see the code above. I want to capture the first "Dell", and then stop, but I got the second "dell". Any thoughts?? Thanks
Re: Write a Loop
by bulk88 (Priest) on Jul 20, 2012 at 04:10 UTC
Re: Write a Loop
by davido (Cardinal) on Jul 21, 2012 at 22:17 UTC

    FYI: I've given this another look and just can't make sense out of your data. Am I to believe that some lines do actually start with "+", and that some words are broken up like this?

    ended June 30, 2001 in conformity with accounting principles generall + Intel +y accepted

    Is that how your input data really looks? I mean I'm thinking those "+" characters must have showed up when you copied and pasted the text from some other node. And how did "Intel" get placed between "generall" and "y"?

    If that's how your data really looks, then I might be able to get started, except that your specification is also ambiguous.

    I don't want to spend another moment trying to come up with a solution if your input data is wrong. You're only going to get help if you post an answerable question. Double-posting doesn't make it more answerable. It just makes it more annoying.


    Dave

      Dave, you are right. This is not the original file, which is too big to post here. I just created this file to illustrate the problem. Right now, it gives me the last match, but not the first. I wanted the program to stop after the first match using "do...until". Do you have a solution? Thanks