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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.