Patricia E Gorden-Ozgul wrote:
> 
> I need help with my $date var.  I want it to print at the sixth printf
> position.  Can someone help?
> 
> Input:
> 18033|18033|89.00|1|182682|20021011|89.00|1|0|0000070001|19724|FIRM|
> 03046|03046|135.93|1|67579558|20020927|135.93|1|0|0000070097|90081|FIRM|
> 08830|08830|88.38|1|182824|20021017|154.26|2|0|0000070001|12435|FIRM|
> 03121|03121|558.81|1|182985|20021022|558.81|1|0|0000070001|15139|FIRM|
> 04500|04500|61.89|1|182988|20021023|61.89|1|0|0000070001|17893|FIRM|
> 
> Code:
> #!/usr/bin/perl -w
> #
> # Parse input from invoice file and split into three output files
> # PGO March 2003
> # must run inv_sed against datafile (file9.final) to remove $
> 
> # my $date = `date +%Y%m%d`;
> my $datafile = "invshrt";
> open DATA, "< $datafile" || die "Can't open data file: $datafile";

You should include the $! variable in the error message so you know WHY open failed.


> while(<DATA>) {
>     chomp;
>     my $date = `date +%Y%m%d`;

Do you really want to change $date each time through the loop?  You should really use
the POSIX::strftime() function for this as it is a LOT faster.


>     my @data = split('\|');

If you are going to use alternate delimiters for the match operator (m//) you should
include the 'm' (m'').


>     printf "%-2s%-16s%-8s%-10s%-10s%-7s%-11s%-154s%-7s\n",
>         "", $data[4], $data[5], $data[9], "", "", $date, "", $data[6];
          1   2         3         4         5   6   7      8   9

You want to print $date at the sixth position but you list it in the seventh position?

      printf "%-2s%-16s%-8s%-10s%-10s%-7s%-11s%-154s%-7s\n",
          '', @data[4,5,9], '', $date, '', '', $data[6];


> }
> close DATA;
> 
> exit 1;


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to