Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

writing formatted output to file

by pugsly62 (Novice)
on Feb 17, 2005 at 21:53 UTC ( #432115=perlquestion: print w/replies, xml ) Need Help??
pugsly62 has asked for the wisdom of the Perl Monks concerning the following question:

I have my program output formatted using the 'format' function. However, when I try to write the output to a file I'm not getting the formatted output (with header) written to the file, just one line of data. When I run it using 'STDOUT' it looks fine on screen. I'm sure I'm missing something simple because I am new to perl. Help! -Scott
my $records = 'scott.d3'; my $FhIn; my $yr_01; my $yr_02; my $yr_03; my $yr_04; my $timestamp = localtime(time()); open $FhIn, '<', $records or die "Could not open $records: $!"; while( my $line = <$FhIn> ) { my ( $county, $year_x, $yr_tot ) = split ' ', $line; if ( $year_x eq "1" ) { $yr_01 = $yr_tot; } elsif ( $year_x eq "2" ) { $yr_02 = $yr_tot; } elsif ( $year_x eq "3" ) { $yr_03 = $yr_tot; } elsif ( $year_x eq "4" ) { $yr_04 = $yr_tot; format STDOUT_TOP = COMPANY NAME More Text Here @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $timestamp COUNTY 2001 2002 2003 2004 ------ ------ ------ ------ ------ . format STDOUT = @<<<<<<<<<<<@<<<<<<<<<<@<<<<<<<<<<@<<<<<<<<<<@<<<<<<<<<< $county $yr_01 $yr_02 $yr_03 $yr_04 open(FILE,">report.txt") or die "Can not open file"; select FILE; $~ = STDOUT; $^ = STDOUT_TOP; write; } } close(FILE); close $FhIn or die $!;

2005-02-17 Janitored by Arunbear - added code tags, as per Monastery guidelines

Replies are listed 'Best First'.
Re: writing formatted output to file
by artist (Parson) on Feb 17, 2005 at 22:22 UTC
    Consider moving the line open(FILE,">report.txt") or die "Can not open file"; before while loop. When you place it inside the loop, it overwrites every time what you have written previously.
      Thanks! That took care of my problem. Scott
Re: writing formatted output to file
by trammell (Priest) on Feb 17, 2005 at 22:39 UTC
    Perhaps the quickest solution is to just redirect STDOUT to file when you're running the script, eg.:
    % perl > report.txt
Re: writing formatted output to file
by hsinclai (Deacon) on Feb 18, 2005 at 01:29 UTC
    In the directive
    format STDOUT =
    are you missing the ending period required by format() ?

      Yes, I was, thank you. It was in there before but I guess I deleted it in error the last time I saved the script. Anyway, I was able to get the desired output by opening my output file outside of my loop. Thanks Scott

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://432115]
Approved by Arunbear
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2018-02-19 22:39 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (266 votes). Check out past polls.