On Fri, 12 Jul 2013 17:14:42 +0530 Agnello George <agnello.dso...@gmail.com> wrote:
> i have raw data that is like this in a flat file . > > start > name:agnello > dob:2 april > address:123 street > end > start > name:babit > dob:13 april > address:3 street > end > start > name:ganesh > dob:1 april > address:23 street > end > > > i need to get the data in the following format > > name:agnello, dob:23 april ,address:123 street > name:babit,dob:13 april,address:3 street > name:ganesh,dob:1 april,address:23 street > > i came up with this , is there a better way to do this : I love record with a definite record terminator. Try: #!/usr/bin/env perl use strict; use warnings; # -------------------------------------- use charnames qw( :full :short ); use English qw( -no_match_vars ); # Avoids regex performance penalty # -------------------------------------- sub read_record { my $record_fh = shift @_; # all records are from "start\n" to "end\n" local $INPUT_RECORD_SEPARATOR = "end\n"; my $record = <$record_fh>; # $record undef at end of file if( defined $record ){ # removes "end\n" chomp $record; # removes "start\n" $record =~ s{ \A start \s* }{}msx; } return $record; } # -------------------------------------- while( my $record = read_record( *DATA )){ # remove trailing "\n" chomp $record; # replace field separators with commas $record =~ s{ \n+ }{,}gmsx; # display the record print "$record\n"; } __DATA__ start name:agnello dob:2 april address:123 street end start name:babit dob:13 april address:3 street end start name:ganesh dob:1 april address:23 street end -- Don't stop where the ink does. Shawn -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/