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.
In reply to How to swap columns in a csv file ? by xuo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |