Horst has asked for the wisdom of the Perl Monks concerning the following question:

Hi guys,i am new to perl and wanted to ask a question ;-) I have to convert two .csv tables to a hash. First table is Telefonnumber;Name;FirstName ....,....,....,.... Second one is Streetname;ZipCode;Telefonnumber ....,....,....,... The first one i made to a Hash of Array, key is the Telefonnumber, that works. And i made it variable, so i can change the key if i want to. The second one i made to a Array of Hashes, but i am not able to make it variable,that means that i can use it for other csv tables. Maybe u can give me some advice.

open (DATA, "< $Filename") or die "..."; my $headline = <DATA>; chomp $headline; my @headlineNew = split(';',$headline); my @headHash; while (<DATA>) { my @save=split(';',$_); chomp @save; push(@headHash, { $headline[0] => $save[0], $headline[1] => $save[1], $headline[2] => $save[2], }); }

At push i want to make it variable, if the csv file is bigger than 3. I hope u understand what i mean, Thank you

Replies are listed 'Best First'.
Re: Perl Hashes
by SuicideJunkie (Vicar) on Jul 12, 2013 at 15:45 UTC

    A quick loop over 0..2 to add keys and values to your hash should do, and allow you to change the value of 2 whenever you like.

    To make the loop more compact, map is handy like so:

    push @headHash, { map {$headline[$_] => $save[$_]} (0..$#headline) };

      Thank u i will try that

Re: Perl Hashes
by mtmcc (Hermit) on Jul 12, 2013 at 16:10 UTC
    Maybe something like this?

    #!/usr/bin/perl use strict; use warnings; my $Filename = $ARGV[0]; my $limit = 0; my $x = 0; my %individualHash = (); open (DATA, "< $Filename") or die "..."; my $headline = <DATA>; chomp $headline; my @headlineNew = split(';',$headline); my @headHash; while (<DATA>) { my @save=split(';',$_); chomp @save; $limit = @save; for ($x = 0; $x<$limit; $x+=1) { $individualHash{"$headlineNew[$x]"} = $save[$x]; print STDERR "HASH KEY\tValue: $headlineNew[$x]\t$indi +vidualHash{$headlineNew[$x]}\n"; } push(@headHash, %individualHash); %individualHash = (); }

    -Michael
      Thank u
Re: Perl Hashes
by Anonymous Monk on Jul 12, 2013 at 23:19 UTC

    Hi,

    Have a look at Text::CSV, Text::CSV::XS and DBD::CSV

    These modules allow you to manipulate .csv files very easily.

    J.C.