I suspect I need to initially read all my data into the hash up front, in
order to do what's necessary. I'd need to be able to know which record I
was on in order to read the next.
So how would I read the entire input file into a hash and print where
appropriate.
Anyone?
Pat
> -----Original Message-----
> From: Gorden-Ozgul, Patricia E
> Sent: Tuesday, March 18, 2003 3:36 PM
> To: '[EMAIL PROTECTED]'
> Subject: Data Read/Loop/Print Problem
>
> I need to modify my code to test the value stored in the 8th position of
> the input.
>
> Here's the input file:
>
> ...
> ...
> 04500|04500|61.89|1|182988|20021023|61.89|1|0|0000070001|17893|FIRM|
> 06156|06156|161.92|1|183774|20021115|566.72|3|0|0000070001|20591|FIRM|
> 06277|06277|323.84|2|183774|20021115|566.72|3|0|0000070001|20591|FIRM|
> 06265|06265|80.96|3|183774|20021115|566.72|3|0|0000070001|20591|FIRM|
> 09310|09310|94.46|1|183719|20021126|165.52|2|0|0000070001|22532|FIRM|
> 09310|09310|71.06|2|183719|20021126|165.52|2|0|0000070001|22532|FIRM|
>
>
> If the value is 1, after printing the 1st and 2nd printf statements, pass
> it through the 3rd printf statement, producting 3 output records.
>
> If it is 2, after printing the 1st and 2nd printf statements, pass it and
> the next input record through the 3rd printf statement, producing 4 output
> records.
>
> If it is 3, after printing the 1st and 2nd printf statements, pass it and
> the next 2 input records through the 3rd printf statment, producing 5
> output records.
>
> ...and so on.
>
> Here's my 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 $datafile = "invshrt";
> open DATA, "< $datafile" || die "Can't open data file: $datafile";
> # my $date = `date +%Y%m%d`;
>
> my $date = do {
> my @ymd=(localtime(time))[5,4,3];
> $ymd[0] += 1900;
> $ymd[1] += 1;
> sprintf "%04d%02d%02d", @ymd;
> };
>
> while(<DATA>) {
> chomp;
> my @data = split('\|');
> printf "%-2s%-16s%-8s%-10s%-10s%-7s%-11s%-152s%-10s%-16s%-2s\n",
> "",
> $data[4],
> $data[5],
> $data[9],
> "",
> "",
> $date,
> "",
> $data[6],
> "",
> "01";
> printf "%-2s%-10s%-10s%-10s%-4s%-12s%-10s%-184s%-2s\n",
> "",
> $data[11],
> "",
> $data[10],
> "",
> $data[6],
> $data[7],
> "",
> "02";
> printf "%-2s%-10s%-6s%-10s%-10s%-8s%-6s%-10s%-180s%-2s\n",
> "",
> $data[11],
> "500500",
> $data[2],
> $data[10],
> $date,
> $data[1],
> "SPMAT340",
> "",
> "03";
> }
> close DATA;
> exit 1;
>
> Perhaps some code before the 3rd printf akin to (pseudo-code follows):
> ...
> ...
> read
> store in hash
> ...
> printf (the 1st);
> printf (the 2nd);
> ...
> if $data[7] = 1
> printf (the 3rd );
> else if $data[7] = 2
> printf (the 3rd);
> read next input rec;
> else if $data[7] = 3;
> printf (the 3rd);
> read next input rec;
> printf (the 3rd);
> read next input rec;
> printf (the 3rd);
>
> I'm looking for syntax if possible.
> Thanks with regards.
> Pat Gorden-Ozgul
>
>
>
>
>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]