File::MultilineGrep - Match multiple line block delimited by start/stop pattern
use File::MultilineGrep; file_multiline_grep ($begin_pattern , $finish_pattern , $middle_pattern , $numeration , $input_file , $output_separator);
To be considered text files having repeated structures. These structures possess repeated start delimiter, optional stop delimiter and variable contents. That is some or all fields of these structures are optional. A task is to select all whole structures, that contain a specified pattern. This can be done using a multiline regular expressions. But there is a performance issue: Processing time using regular expression is not directly proportional to amount of structures, so that increasing of this amount might cause the reqular expression will never finish. Processing time of the proposed function is directly proportional to amount of structures.
file_multiline_grep( $begin_pattern # regular expression , $finish_pattern # optional parameter, regular expression , $middle_pattern # regular expression , $numeration # if false - not enumerate output lines , $input_file # optional parameter # if false - read from STDIN , $output_separator); # optional parameter
use File::MultilineGrep; file_multiline_grep ('person_id' , 'end_person' , 'Giant' , 'enumerate_lines' , 'most_famous_people' , '------
reads all records from a file 'most_famous_people' (where line enumeration doesn't belong to the file):
1 person_id - 001 2 profession - Prophet 3 first name - Moses 4 birthyear - 1391 BCE 5 end_person 6 ... 7 person_id - 002 8 profession - Giant 9 first name - Samson 10 birthyear - Unknown 11 end_person 12 ... 13 person_id - 003 14 profession - King 15 first name - David 16 birthyear - 1040 BCE 17 end_person 18 ... 19 person_id - 004 20 profession - Giant 21 first name - Goliath 22 birthyear - 135 BCE 23 end_person
that begin with 'person_id', finish with 'end_person' and contain a pattern 'Giant':
7: person_id - 002 8= profession - Giant 9: first name - Samson 10: birthyear - Unknown 11: end_person ------ 19: person_id - 004 20= profession - Giant 21: first name - Goliath 22: birthyear - 135 BCE 23: end_person ------
Mart E. Rivilis, rivilism@cpan.org
Please report any bugs or feature requests to bug-file-multilinegrep at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-MultilineGrep. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-file-multilinegrep at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc File::MultilineGrep
You can also look for information at:
RT: CPAN's request tracker (report bugs here) http://rt.cpan.org/NoAuth/Bugs.html?Dist=File-MultilineGrep
AnnoCPAN: Annotated CPAN documentation http://annocpan.org/dist/File-MultilineGrep
CPAN Ratings http://cpanratings.perl.org/d/File-MultilineGrep
Search CPAN http://search.cpan.org/dist/File-MultilineGrep/
Copyright 2013 Mart E. Rivilis.
This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0).
To install File::MultilineGrep, copy and paste the appropriate command in to your terminal.
cpanm
cpanm File::MultilineGrep
CPAN shell
perl -MCPAN -e shell install File::MultilineGrep
For more information on module installation, please visit the detailed CPAN module installation guide.