Ya, this code is perfect Punit. This works fine for me too. Regards, Midhun
On Thu, Jan 3, 2013 at 4:46 PM, Paul Johnson <p...@pjcj.net> wrote: > On Thu, Jan 03, 2013 at 03:53:20PM +0530, punit jain wrote: > > Hi, > > > > I am facing issues in parsing using Regex. The problem definition is as > > below : - > > > I want to parse it in such a way that all data with BEGIN and END goes > in > > one file and BEGINDL and ENDDL goes in other with kind of processing I > want > > to so. > > > > I am using below code but doesnot work : - > > What doesn't work? It seems fine to me. > > > #!/usr/bin/perl > > my $file=shift; > > open( FH , "$file" ) or die("open failed: $!\n"); > > open ($fh1, ">/tmp/a"); > > open ($fh2, ">/tmp/b"); > > my $check=0; > > You probably want $check = 2 here. > > > while (<FH>) { > > # next unless /BEGIN/ .. /END/ || /BEGINDL/ .. /ENDDL/ || eof; > > if($_ =~ /BEGIN$/ || ($check == 0) ) { > > print $fh1 $_; > > $check = 0; > > if($_ =~ /END$/) { > > $check = 2; > > } > > }elsif($_ =~ /BEGINDL/ || ($check == 1)) { > > print $fh2 $_; > > $check = 1; > > if($_ =~ /ENDDL/) { > > $check = 2; > > } > > } > > next unless($check == 2); > > } > > > > Any better suggestion ? > > Depends on how you define better, but perhaps > > $ perl -ne 'print if /BEGIN$/ .. /END$/' < file > /tmp/a > $ perl -ne 'print if /BEGINDL$/ .. /ENDDL$/' < file > /tmp/b > > -- > Paul Johnson - p...@pjcj.net > http://www.pjcj.net > > -- > To unsubscribe, e-mail: beginners-unsubscr...@perl.org > For additional commands, e-mail: beginners-h...@perl.org > http://learn.perl.org/ > > >