Problème de split

Problème de split - Perl - Programmation

Marsh Posté le 19-07-2010 à 16:31:58    

Hello,
 
j'ai un fichier .csv de la forme suivante
"...","...","...",...,...,"blablabla","bla_again"
 
Je dois organiser tout cela pour une base de donnée. Pour cela j'utilise la fonction split par rapport à la virgule pour mettre la première colonne du fichier dans la première colonne de la base donnée et ainsi de suite. Cela marche parfaitement.
Le hic intervient pour les 2 dernières colonnes: en effet dans le blablabla il y a des virgules, et donc dans l'avant dernière colonne de ma base de donné, je me retrouve avec une partie de blablabla, et dans la dernière avec une autre partie de blablabla ce qui ne correspond bien pas évidemment à ce que je veux ! (blablabla doit se retrouver dans l'avant dernière colonne de la base de donnée avec les virgules, et dans la dernière colonne je dois avoir bla_again)
 
Comment dois je procéder ?
 
merci

Reply

Marsh Posté le 19-07-2010 à 16:31:58   

Reply

Marsh Posté le 19-07-2010 à 22:46:11    

Si je comprends bien, tous tes champs sont entourés d'une double quote?
Dans ce cas la c'est simple: si un caractère comme ; ne figure pas dans tes champs, tu peux faire une substitution ligne à ligne:
$line =~ s/","/";"/g;
avant de splitter ta ligne sur ';' (ou d'utiliser le module Text::CSV pour parser la ligne)
 
Par contre, si il peut y avoir n'importe quel caractère (sauf la double quote) dans tes champs, même un ; c'est plus coton.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 20-07-2010 à 08:56:24    

Bonjour,
 
j'ai réussi à m'en sortir finalement avec:
 
  use Text::ParseWords;
 @new = quotewords(",", 0, $text);
 
Merci ;-)

Reply

Marsh Posté le 20-07-2010 à 09:30:18    

Oulah!, j'étais endormi moi hier soir, je me suis pas souvenu que split prenait une regex en paramètre.
Il suffisait de faire
my @columns = split /^"|","|"$/, $line;
shift @columns;   (pour virer le premier champ, vide)
Et ça donne les champs (sans leur double quote autour) dans l'array.
 
Mais ce que tu as fait est bien aussi. C'est un module que je n'avais pas encore employé, je le connaitrais dorénavant.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed