in reply to csv to hash table

 $inputfile1 =~ s/\s*\z//;

$inputfile1 is your filehandle, but you are editing that filehandle and thus corrupting it. Try:

sub mainCSV { open (my $inputfile1, '<', "$inputfile") or die "Unable to open $i +nputfile1: $!"; my %hash; while( my $line = <$inputfile1> ) { $line =~ s/\s*\z//; my @arrayfile1 = split /,/, $line; my $keyfile1 = shift @arrayfile1; $hash{$keyfile1} = \@arrayfile1; } print %hash; close $inputfile1; }

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: csv to hash table
by waytoperl (Beadle) on Nov 19, 2013 at 05:41 UTC

    Thanks for responding BrowerUk. After updating, i have error of uninitiated value. I think it might be because of input CVS file have initial few lines of dummy values Any way I can create hash table to start from starting at particular line in CSV file.

    Use of uninitialized value in hash element at perl_program.pl line 67, <$inputfile1> line 3 (#1) (W uninitialized) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables. To help you figure out what was undefined, perl tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program. Use of uninitialized value in hash element at perl_program.pl line xx, <$inputfile1> line 4 (#1) Use of uninitialized value in hash element at perl_program.pl line xx, <$inputfile1> line 5 (#1) Use of uninitialized value in hash element at perl_program.pl line xx, <$inputfile1> line 6 (#1) Use of uninitialized value in hash element at perl_program.pl line xx, <$inputfile1> line 7 (#1)

      Any way I can create hash table to start from starting at particular line in CSV file.

      Read past the lines you want to skip before entering your while loop.

      (Ps. If you can't work out how to do that for yourself, you might consider employing someone to write this code for you.)


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        Update! got working code that reads csv file and creates hash table. Surprisingly, when i print and check hash size, script displays 13 and prints 13 keys and 13 values. I should have minimum 150 keys/values in hash table. Does anyone take a look and suggest any workarounds!!!

        Column_1,Column_2 Name11,In Name21,Out Name31,In Name41,In
        use Data::Dumper; my $infile = file.csv; sub mainCSV { open (my $infile1, '<', "$infile") or die "Unable to open $infile: + $!"; my %hash = (); while (my $line = <$infile1>) { chomp; $line =~ s/\s*\z//; my @array = split /,/, $line; my $key = shift @array; $hash{$key} = \@array; } my $size = scalar keys %hash; # explicit scalar context print "Hash size: $size\n"; # prints Hash size: xx print Dumper(\%hash); }