[Perl] One-liner pour concaténer deux colonnes d'un CSV

Laurent Rosenfeld laurent.rosenfeld at googlemail.com
Lun 12 Fév 17:41:13 CET 2018


Bonjour,

du moment que tu utilises Text::CSV, difficile de réduire cette partie là.

Du coup, la fin de la ligne peut peut-être se réécrire:

print @f[0..1].','(join ',' @f[2..3]);

Mais ça ne fait pas gagner grand-chose.

(A vérifier que tu obtiens bien la même chose).

A noter que, quand il y a une seule valeur scalaire, on n'écrit pas @f[0]
ou @f[1] , mais $f[0]  et $f[1].

Bonne journée,
Laurent.

Le 12 février 2018 à 15:48, Charles Nepote <charles at nepote.org> a écrit :

> Bonjour à tous,
>
> Je cherche à concaténer *proprement* deux colonnes d'un CSV en UTF-8 avec
> un code court, lisible et sous la forme d'un one-liner.
>
> Je suis arrivé à ça (qui fonctionne) :
> perl -MText::CSV::Encoded -lne '$c=Text::CSV::Encoded->new({encoding=>utf8});
> $c->parse($_);@f=$c->fields();print (@f[0]. at f[1].",". at f[2].",". at f[3])'
> monfichier.csv
>
> Je me demandais si on peut faire plus court tout en restant lisible (j'ai
> un petit niveau en Perl).
> J'ai exclu les regexp parce que c'est très (trop) compliqué pour gérer les
> cas où il y a une virgule à l'intérieur d'un champ (qui plus es contenant
> des guillemets échappés) : colonne1,"colonne\"n°\",2",colonne3.
>
> Charles.
>
> _______________________________________________
> Perl mailing list
> Perl at mongueurs.net
> http://listes.mongueurs.net/mailman/listinfo/perl
>
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/mailman/private/perl/attachments/20180212/fb10bd36/attachment-0001.html>


Plus d'informations sur la liste de diffusion Perl