| [reply] |
Thanks, I read the second para.
Thank you everyone else for your advice.
Here is the code which I'm trying and it doesnt work. I modified some code i found online.
open DR, ">ddailyreport.prn" or die "Cant open file";
format DATA =
@<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<< @##### @###############
+ Rs@#####.## ~
$consname, $subdvn, $chequeno, $receiptno, $amount
.
format TOTAL =
--------------------------------------------------------------------
+-----------------------
+ Rs@#####.##
+ $total
.
format TOP =
@|||||||||||||||||||||||||||||||||||| Pg @<
"Daily Deposit Works Report", $%
Consumer name Subdivision Cheque no. Receipt no.
+ Amount
-------------- -------------- ------------- -------------
+- -------
.
sub dotize {
my($width, $string) = @_;
if (length($string) > $width) {
return(substr($string, 0, $width - 3) . "...");
}
else {
return($string);
}
}
$~ = "TOP";
write(DR);
open(FILE, "<ddailyreport.txt");
@lines = <FILE>;
close(FILE);
$total = 0;
foreach (@lines) {
chop();
($consname, $subdvn, $chequeno, $receiptno, $amount) = (split(/!/)
+);
$consname = "" if !defined($consname);
$subdvn = "" if !defined($subdvn);
$chequeno = 0 if !defined($chequeno);
$receiptno = 0 if !defined($receiptno);
$amount= 0 if !defined($amount);
$~ = "DATA";
write(DR);
$total += $amount;
}
$~ = "TOTAL";
write(DR);
close(DR);
What is wrong in this piece of code?
| [reply] [d/l] |
perl_seeker:
How doesn't it work? Specifically: What did you expect to see, what *did* you see, and what were the error messages (if any) that you received?
Looking over your code, I'd change a few things, anyway:
open DR, ">ddailyreport.prn" or die "Can't open file";
# Naming a format the same as a file handle automatically associates t
+he format
# to the data handle.
format DR =
@<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<< @##### @###############
+ Rs@#####.## ~
$consname, $subdvn, $chequeno, $receiptno, $amount
.
# Similarly, adding _TOP to the format name gives you automatic top-of
+-form
# handling.
format DR_TOP =
@|||||||||||||||||||||||||||||||||||| Pg @<
"Daily Deposit Works Report", $%
Consumer name Subdivision Cheque no. Receipt no.
+ Amount
-------------- -------------- ------------- -------------
+- -------
.
format TOTAL =
--------------------------------------------------------------------
+-----------------------
+ Rs@#####.##
+ $total
.
sub dotize {
my($width, $string) = @_;
if (length($string) > $width) {
return(substr($string, 0, $width - 3) . "...");
}
else {
return($string);
}
}
# Two things:
# (1) This is not needed, per notes above...
# (2) The $~ variable associates a format FOR THE DEFAULT OUTPUT
# STREAM, so you just changed it for stdout. You would really
# use:
# my $ofh = select(DR); # make DR the default output
# $~ = "DR"; # set format for detail lines
# $^ = "DR_TOP"; # set format for top-of-page
# select($ofh); # Restore default output stream
#
#$~ = "TOP";
#write(DR);
open(FILE, "<ddailyreport.txt");
@lines = <FILE>;
close(FILE);
$total = 0;
foreach (@lines) {
chop();
($consname, $subdvn, $chequeno, $receiptno, $amount) = (split(/!/)
+);
$consname = "" if !defined($consname);
$subdvn = "" if !defined($subdvn);
$chequeno = 0 if !defined($chequeno);
$receiptno = 0 if !defined($receiptno);
$amount= 0 if !defined($amount);
# You need only do the association of the format once. You only n
+eed
# to do it again if you're going to change it...
#$~ = "DATA";
write(DR);
$total += $amount;
}
# Now we change the output format for your summary
my $ofh = select(DR);
$~ = "TOTAL";
select($ofh);
write(DR);
close(DR);
...roboticus
| [reply] [d/l] |
Of course, that is what it is designed for. Here is a simple example: open (REPORT, '>', 'report.txt') ||
die "Can't open report.txt: $!";
write REPORT;
format REPORT =
@<<<<<<< @>>> @<<<<<<<<<<<<<<<<<<<<<<<<
$var1, $var2, $var3
.
I have to admit that I have been unable to get format to work with lexical file handles. | [reply] [d/l] |
| [reply] |
I've never worked with format before, but the documentation mentions it together with write, which in turns takes an optional file handle as its sole argument... is that what you are looking for? Or is the matter somehow more complicated? | [reply] |