Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^3: Appending arrays into the rows of a 2 dimension array

by Laurent_R (Parson)
on Jun 03, 2014 at 22:36 UTC ( #1088532=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Appending arrays into the rows of a 2 dimension array
in thread Appending arrays into the rows of a 2 dimension array

Hi PerlSufi, your code is very fine for the example, but it does not scale up very well for more than two files (and the OP mentioned that there are multiple data files).

I would probably avoid storing each file into individual arrays, and try to process each file sequentially, and change the code to something like this (incomplete and obviously untested):

use strict; use warnings; my %data=(); for my $file (qw /file_1.txt file_2.txt, file_3.txt ... file_n.txt/) { open my $FH, "<", $file or die "could not open $file $!"; while (<$FH>) { chomp; my ($sz,$sum,@f) = split /\s+/; push @{$data{$sz}},$_ for @f; } close $FH; } # ...
Or possibly, if the files are passed as arguments to the script:
use strict; use warnings; my %data=(); for my $file (@ARGV) { open my $FH, "<", $file or die "could not open $file $!"; while (<$FH>) { # ... } # ... } # ...
or even (still assuming the files are passed as arguments):
use strict; use warnings; use autodie; my %data=(); while (<>) { chomp; # ... } #...
This latest solution might be used even if the argument passed to the script is not a list of files, but, say, the directory where they are stored:
use strict; use warnings; use autodie; my $stat_dir = shift; my %data = (); { local @ARGV = glob ("$stat_dir/*.*"); while (<>) { chomp; # ... } # ... }
Admittedly, the latest solutions look less robust and one might want to avoid them for production code. But are they really less robust? Hmm, if glob returns a list of files, then you basically know the files are there, the only thing that is lacking might be checking read privileges, no big deal.


Comment on Re^3: Appending arrays into the rows of a 2 dimension array
Select or Download Code
Re^4: Appending arrays into the rows of a 2 dimension array
by PerlSufi (Pilgrim) on Jun 04, 2014 at 13:29 UTC
    Awesome Laurent_R. I thought about the @ARGV solution but the other ones are great, too- thanks :)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1088532]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (12)
As of 2014-09-18 18:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (120 votes), past polls