in reply to Re: Extract the variable
in thread Extract the variable

Now my file contains these data
.rem ***************************************************************** +***** .rem * + * .rem * deb123.rpt + * .rem ***************************************************************** +***** .rem .rem ------------------------ book_tab variables --------------------- .rem .declare book_no a14 .declare l_code a10 .declare l_book a12 .declare book_date a13
and I need to read this file line by line the file name is deb123.rpt and my code is
use IO::File; my $fh = IO::File->new(); die "File $ARGV[0] is there in the specified location but is of Zero b +ytes" if (-z $ARGV[0]); $ARGV[0] .= ".rpt"; $fh->open($ARGV[0], "r"); local($/); #my $data = $fh->getline; #$fh->close; while(defined($data = $fh->getline)){ if($data =~ /^\.r/){ print "This is a comment $data\n"; } if($data =~ /^\.dec/){ print "This is declared variable $data\n"; } } $fh->close;
but its not giving any output and even its not printing the data at particular line in the file also... Please help me out for the code

Replies are listed 'Best First'.
Re^3: Extract the variable
by johngg (Canon) on Jun 25, 2007 at 14:27 UTC
    Your use of my leads me to hope that you are putting use strict; and use warnings; at the top of your scripts. It is also a good idea to indent your code (my preference is four spaces) to give a visual indication to control flow.

    I'm not sure why you are using IO::File when three-argument open anf lexical filehandle will serve as well. I have used your data but have added a bogus line to demonstrate how to handle lines that don't fit your expectations. I use a regex capture to get the variable name (captured in $1) and print it out; obviously, you can assign it to a variable for later use. Once you know what a line is and have dealt with it, use next to get the next line rather than testing further. Here is the input file

    the code

    use strict; use warnings; my $inFile = q{spw623147.txt}; open my $inFH, q{<}, $inFile or die qq{open: $inFile: $!\n}; while ( <$inFH> ) { if ( m{\A\.rem} ) { print qq{ Comment Line: $_}; next; } if ( m{\A\.declare\s+(\S+)} ) { print qq{ Data Line: $_}; print qq{ Variable is: $1\n}; next; } print qq{Not recognised: $_}; } close $inFH or die qq{close: $inFile: $!\n};

    and the output

    Comment Line: .rem ************************************************* +********************* Comment Line: .rem * + * Comment Line: .rem * deb123.rpt + * Comment Line: .rem ************************************************* +********************* Comment Line: .rem Comment Line: .rem ------------------------ book_tab variables ----- +---------------- Comment Line: .rem Data Line: .declare book_no a14 Variable is: book_no Data Line: .declare l_code a10 Variable is: l_code Not recognised: .burble nonsense directive here Data Line: .declare l_book a12 Variable is: l_book Data Line: .declare book_date a13 Variable is: book_date

    I hope thisis of use.

    Cheers,

    JohnGG

    Update: Fixed typo

    A reply falls below the community's threshold of quality. You may see it by logging in.