e-letter wrote:
> Readers,
>
> I have a csv file (greater than 256 columns hence unable to open in
> spreadsheet) of the following format:
>
> column header1, column header2, column header3
> 1,0.0e0,0.0e0,5e-6
> 2,0.0e0,0.0e0,6e-7
> 3,0.0e0,0.0e0,0.0e0
>
> I want to perform: "if column headerx contains only values of 0.0e0,
> delete the column (including the column header).
>
> How do I start please?
Here's a solution using Text::CSV and a lot of help from the very lovely
List::MoreUtils.
HTH,
Rob
use strict;
use warnings;
use IO::Handle;
use Fcntl qw/SEEK_SET/;
use Text::CSV;
use List::MoreUtils qw/indexes/;
open my $fh, '<', 'input.csv' or die $!;
my $csv = Text::CSV->new;
my @keep = do {
my $header = $csv->getline($fh) or die $csv->error_diag;
(0) x @$header;
};
while (my $row = $csv->getline($fh)) {
$keep[$_]++ foreach indexes { $_ ne '0.0e0' } @$row;
}
seek $fh, 0, SEEK_SET;
@keep = indexes { $_ } @keep;
while (my $row = $csv->getline($fh)) {
$csv->combine(@[EMAIL PROTECTED]);
print $csv->string, "\n";
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/