in reply to Re^2: Question about text::csv_xs
in thread Question about text::csv_xs

Sure, that would very easy. Suppose you wanted to use the third field as hashkey. Then get_parsed_lines would be changed to:

sub get_parsed_lines { my $file = shift; my $csv = Text::CSV_XS->new(); my %hash; open my $in, '<', $file or die "Read failed: $!\n"; while ( <$in> ) { $csv->parse( $_ ) or warn "Bad data: $_\n", next; my @row = $csv->fields(); $hash{ $row[ 2 ] } = \@row; } close $in or die "Failed to close $file: $!\n"; return \%hash; }
More generally, you may want to use several fields, e.g., fields 0, 2 and 3. In this case, just change the last line in the loop to
$hash{ join( ',', @row[ 0, 2, 3] ) } = \@row;

the lowliest monk

Replies are listed 'Best First'.
Re^4: Question about text::csv_xs
by Thargor (Scribe) on May 04, 2005 at 17:42 UTC
    Hey thanks again that was what I ended up doing before I got a reply only problem is either I am displaying the data incorrectly on screen which is possible or all the values in the hass are the same. I only have 5 row cvs files that have 3 rows in common so the result is a 5 element hash problem is when I display the first value assigned in yhr ref'd array to a key it is always the same for every key which it definitely shouldn't be. what I am doing to display is a
    foreach $hashkey (keys %hash){ print "$hashkey has $hash{$hashkey}->[0] in first array element.\n" +; }
    and what I get is the same result for every key so maybe I am doing that wrong. Anyways thanks for the help in advance.

    Update: Ok the data looks like "lastname","firstname","date". What happens is that the %hash ends up having the keys tied to "lastname" so what is happening is when I print out the hash to the screen I get like
    Smith has Johnson in first array element.
    Johnson has Johnson in first array element.
    Laskey has Johnson in first array element.
    and so on.