> Hello Rich
Hi, Chris, thanks for your response
>
> See docs for perlfunc, specifically split.
>
> Especially, the form for split
> 'split /PATTERN/,EXPR,LIMIT'
>
> By setting the limit, you will be able to solve the problem.
>
> Chris
>
The thing is I can't be sure that there will never be embedded commas in
the data (well maybe I can with this particular set of data, not sure),
so split (as discussed in the Cookbook) isn't the way to go. This is why
I was looking to use a specialized module for the job. Also, I need to
be able to address several of the fields specifically, to change their
values, so I like the idea of using a hash which is done for me with
something like Tie::Handle::CSV.
What I've come up with is this:
<code>
#!/usr/bin/perl -w
use strict;
use Tie::Handle::CSV;
my $file = shift or die "You forgot to provide the name of a CSV
file\n";
my $csv_fh = Tie::Handle::CSV->new(file => $file, header => 0);
my %csv_headers = (
0 => 'Num',
1 => 'Env Num',
2 => 'Envelope',
3 => 'Transaction',
4 => 'Lockbox',
5 => 'Date',
6 => 'Time',
7 => 'Batch',
8 => 'Batch Item',
9 => 'Check',
10 => 'Check Amount',
11 => 'ABA/RT',
12 => 'Account Num',
13 => 'Check Num',
14 => 'Check Image',
15 => 'Envelope Image',
16 => 'Page Images'
);
my %csv_hash;
while (my $csv_line = <$csv_fh>) {
next if ($. < 4 );
for my $index (0..15) {
$csv_hash{ $csv_headers{$index} } = $csv_line -> [$index];
}
# The values that remain in @{$csv_line} are all associated with
"Page Images", so
# we need to build an array to pass as a hash value...
$csv_hash{'Page Images'} = [];
for my $index (16..$#{$csv_line}) {
push @{ $csv_hash{'Page Images'} }, $csv_line -> [$index];
}
for (sort keys %csv_hash) {
if ( !ref $csv_hash{$_} ) { # If the value is not a (array) ref
print $_, " => ", $csv_hash{$_}, "\n";
} else {
print $_, " => \n";
for ( @{ $csv_hash{$_} } ) {
print "\n\t", $_;
}
print "\n\n";
}
}
print "\n\n\n";
print '*' x 20, "\n";
}
</code>
Which does what I want, but it seems like there should be an easier
way...
richf
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>