Problème de split - Perl - Programmation
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+,
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 ;-)
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+,
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