#!/usr/bin/perl -w use Data::Dumper; use Parse::RecDescent; use strict; $::RD_HINT = 1; # diagnose common Parse::RecDescent errors $::RD_ERRORS = 1; # report fatal errors $::RD_WARN = 1; # report non-fatal problems my $grammar = q? file : record(s) { my @recs; push @recs, @{$item[1]}; \@recs } record : /\|-{38}\|/ details { my $hr = $item[2] } details : date request name tel email { my $hr = { %{$item[1]}, %{$item[2]}, %{$item[3]}, %{$item[4]}, %{$item[5]} } } date : 'Date: ' /.+/ { {date => $item[2]} } request : 'Request: ' /.+/ { {request => $item[2]} } name : 'Name: ' /.+/ { {name => $item[2]} } tel : 'Tel: ' /.+/ { {tel => $item[2]} } email : 'email: ' /.+/ { {email => $item[2]} } ?; my $text; { local $/ = undef; $text = <DATA>; } my $parser = Parse::RecDescent->new( $grammar ) or die "No parser"; my $tree = $parser->file( $text ); $tree or die "Unable to parse records"; print Dumper( $tree ); __DATA__ |--------------------------------------| Date: today Request: text here text here text here Name: Joe Bloggs Tel: 0123 45677 email: joebloggs@bloggs.com |--------------------------------------| Date: Today Request: text here text here text here Name: John Smith Tel: 0123 45677 email: johnsmith@smith.com |--------------------------------------|
In reply to Re: processing text from flat file
by meonkeys
in thread processing text from flat file
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |