Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

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
[Discipulus]: yes I saw and i go to the tranlsator, but i supposed to be a pun, a normal sink in a normal roof.. congrats to our sister if so!
[Discipulus]: Insula Mona? they have the same flag of Sicily.. curious

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (9)
As of 2017-11-21 12:01 GMT
Find Nodes?
    Voting Booth?
    In order to be able to say "I know Perl", you must have:

    Results (299 votes). Check out past polls.