http://www.perlmonks.org?node_id=1044393


in reply to indefinite number of columns

Or an array of arrays, but this would use more memory than using hashes as suggested above, which might be important if your files are very large:

#!/usr/bin/perl use strict; use warnings; my $fileName = $ARGV[0]; my $numberOfColumns = 0; my @line = (); my $lineNumber = 0; my $x = 0; my $p = 0; my @arrayOfArrays = (); my $firstTime = 0; open (FILE, "<", $fileName); while (<FILE>) { chomp; @line = split (",", $_); if ($firstTime == 0) { $numberOfColumns = @line; $firstTime = 1; } for($x = 0; $x < $numberOfColumns; $x += 1) { $arrayOfArrays[$x][$lineNumber] = $line[$x]; } $lineNumber +=1; } #to access your values: column one: $p=0, column 2: $p = 1 etc. for ($p = 0; $p < $numberOfColumns; $p += 1) { for ($x= 0; $x<$lineNumber; $x += 1) { print STDERR "$arrayOfArrays[$p][$x]\n"; } }

-Michael

Replies are listed 'Best First'.
Re^2: indefinite number of columns
by zork42 (Monk) on Jul 17, 2013 at 12:32 UTC
    Or an array of arrays, but this would use more memory than using hashes as suggested above, which might be important if your files are very large:
    I don't understand this, please could you explain:

    1. Why would an array of arrays use more memory than a hash of arrays?
      I'd expect it to be the other way round.
    2. would the "of arrays" data occupy the same amount of memory in both AoA and HoA in this example?
      (This seems reasonable as this is just the total data of all the rows.)
    3. From (2) follows: Why does an array use more memory than a hash?

    Thanks :)
      Touché!

      My mistake. I guess the hash of arrays would take up slightly more memory, because instead of using an array index to label individual arrays, it uses the column headers to label them. I imagine that if the number of columns is low, there wouldn't be a large difference?

      Thanks for pointing that out!

      -Michael
        Thanks for your reply. That makes more sense! :)