in reply to pattern matching between two specific strings

I would do it on line basis (using the .. flip flop operator):
. . . my $firsttime = 1; while(<IN>){ if(/Final graph set matrix/ .. /PLUTO4 finished/){ if($firstime--){ print "\nnew data set\n"; } my @gset_match = ($string =~ ([A-Z]\s\d+,\s\d+\(\s*\d+\))/g); foreach $_(@gset_match) { print TEXT "$_\n"; } } } . . .
I feel there should be some more elegant way to print the delimiters, but can't figure it out.

Replies are listed 'Best First'.
Re: Re: pattern matching between two specific strings
by harry34 (Sexton) on Jul 14, 2003 at 10:54 UTC
    I could not get the code you provided to work
    I've listed a portion of the file I'm working from which contains numerous datasets having the following format, see below: I need to extract the data between Final graph set matrix and PLUTO4 finished each time it is present in the file and seperated by a title of some sort.

    hope you can help, cheers
    pattern:<br> /([A-Z]\s\d+,\s\d+\(\s*\d+\))/g
    FILE CONTAINS DATA IN THE FOLLOWING FORMAT

    Final graph set matrix
    ----------
    C 1, 1( 9)
    ----------
    C 2, 2(11) C 1, 1( 4)
    ----------
    C 2, 2(18) C 1, 2(11) C 1, 1( 9)
    R 2, 2( 8)
    ----------
    C 1, 2(11) C 2, 2(18) C 2, 2(11) C 1, 1( 4)
    R 2, 2(18)
    PLUTO4 finished


    Final graph set matrix
    ----------
    C 1, 1( 4)
    ----------
    C 2, 2(18) C 1, 1( 4)
    R 2, 2(18)
    PLUTO4 finished


    Final graph set matrix
    ----------
    C 1, 1( 4)
    ----------
    C 2, 2(18) C 1, 1( 4)
    R 2, 2(18)
    ----------
    C 2, 2(11) C 2, 2(11) C 1, 1( 9)
    ----------
    C 2, 2(11) C 2, 2(11) C 2, 2(18) C 1, 1( 9)
    R 2, 2( 4)
    PLUTO4 finished
      Please post the code you derived from mine - I'll see what is the problem with it.
        This is how I used your origenal code.

        cheers harry
        #!/usr/local/bin/perl $in_filename = "graph_set.out"; open (IN,"$in_filename") or die "Can't open $in_filename:$!\n"; my $firsttime = 1; while(<IN>){ if(/Final graph set matrix/ .. /PLUTO4 finished/){ if($firstime--){ print "\nnew data set\n"; } my @gset_match = ($string =~ ([A-Z]\s\d+,\s\d+\(\s*\d+\))/g); open (TEXT, ">>graph_set.txt") or die "Can't create graph_set.txt: + $!\n"; foreach $_(@gset_match) { print TEXT "$_\n"; } close TEXT; } } close (IN);