in reply to Re: Perl script for the post processing of one CSV file
in thread Perl script for the post processing of one CSV file
You can stream it and prevent memory hogs on big data. Additionally, install Text::CSV_XS for speed
use Text::CSV_XS "csv"; my %sums; # Column sums. $sum{column} += $value my @head; my @pats; csv (in => "input.csv", out => undef, bom => 1, kh => \@head, on_in => + sub { my ($csv, $row) = @_; unless (@pats) { # Fetch the "patN" column names, in order. This works # for single digit "patN" names, as that was your # example. Multi-digit names will require a more complex # sort, left as an exercise to the reader. # XXX @pats = sort { grep m/^pat\d+$/ } @head; @pats = sort grep m/^pat\d+$/ => @head; # This line fixed } for (@{$row}{@pats}) { # You are now iterating over every patN value, # in order. Perform your transformation } # Just an example. $sums{$_} += $row->{$_} for @pats; });
update: I changed the grep line which I blindly copied from the original code
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: Perl script for the post processing of one CSV file
by rjt (Curate) on Oct 03, 2019 at 07:59 UTC | |
Re^3: Perl script for the post processing of one CSV file
by kshitij (Sexton) on Oct 03, 2019 at 07:22 UTC | |
Re^3: Perl script for the post processing of one CSV file
by kshitij (Sexton) on Oct 03, 2019 at 07:59 UTC | |
by rjt (Curate) on Oct 03, 2019 at 08:07 UTC | |
by kshitij (Sexton) on Oct 03, 2019 at 08:15 UTC | |
by rjt (Curate) on Oct 03, 2019 at 09:00 UTC | |
by hippo (Archbishop) on Oct 03, 2019 at 08:12 UTC |