xuo has asked for the wisdom of the Perl Monks concerning the following question:
Hello Perl's Monks,
I've got the following issue :
I've got a csv file (where fields are separated with , (commas)) and that can have , (commas) inside the fields. This is the reason why I've used the Text::CSV module.
My goal is to remove some unused fields (columns) and to swap some of them.
Input file :
column1,column2,column3,column4,column5,column6 datar1c1,datar1c2,datar1c3,datar1c4,datar1c5,datar1c6 datar2c1,"data,r2c2",datar2c3,datar2c4,datar2c5,datar2c6 datar3c1,datar3c2,"data, r3c3",datar3c4,datar3c5,datar3c6
Expected output file :
column2,column1,column4,column3 datar1c2,datar1c1,datar1c4,datar1c3 datar2c2,datar2c1,datar2c4,datar2c3 datar3c2,datar3c1,datar3c4,"data, r3c3"
In this example, I want to remove the 2 last columns and swap columns 1 and 2 and columns 3 and 4.
The following code removes the columns 5 and 6 but I don't know how to swap the columns.
#!/usr/bin/perl use strict ; use warnings ; use Text::CSV ; use Getopt::Long qw(GetOptions) ; my $inputFile = '' ; my $outputFile = '' ; my $csv = Text::CSV->new (); GetOptions( 'file:s' => \$inputFile, 'out:s' => \$outputFile, ) or die("Error in command line arguments\n") ; open(my $data, '<:encoding(utf8)', $inputFile) or die "Could not open +'$inputFile' \n" ; open(my $out, '>:encoding(utf8)', $outputFile) or die "Could not open +'$outputFile' \n" ; while (my $fields = $csv->getline( $data )) { splice @$fields, 4, 2 ; $csv->print($out, $fields) ; print $out "\n" ; } close $data ; close $out ;
Could you help me ?
Regards.
Xuo.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: How to swap columns in a csv file ?
by Tux (Canon) on Jan 05, 2025 at 14:23 UTC | |
by ikegami (Patriarch) on Jan 06, 2025 at 12:54 UTC | |
by xuo (Acolyte) on Jan 05, 2025 at 17:49 UTC | |
by 1nickt (Canon) on Jan 06, 2025 at 09:43 UTC | |
by xuo (Acolyte) on Jan 07, 2025 at 20:03 UTC | |
by xuo (Acolyte) on Jan 05, 2025 at 19:17 UTC | |
by xuo (Acolyte) on Jan 08, 2025 at 19:35 UTC | |
by 1nickt (Canon) on Jan 09, 2025 at 10:05 UTC |