Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

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 cooling their heels in the Monastery: (7)
As of 2017-09-25 10:43 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (279 votes). Check out past polls.