Pages : 1
#1 Le 10/12/2012, à 11:03
- cervo
Expressions régulières et sed
Salut,
Je cherche à parser un CSV en ruby via FasterCSV. Le problème est que mon fichier contient des lignes comme :
1) un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,machin
2) un truc,autre chose,"Let's Play Halo 3 Part 9.5 "Escape', High Charity",bidule,machin
Mon séparateur est donc la virgule.
Dans le 1er cas, il me parse en prenant la virgule comme séparateur, donc me retourne un Array ["truc", "autre chose", "Let's Play Halo 3 Part 9.5 ""Escape", "High Charity", "bidule", "machin"]
Dans le 2ème cas, une erreur "illegal quoting" m'est retournée.
J'aimerai donc utiliser sed pour supprimer tout contenu entre guillemets, ça donnerait : truc,autre chose,deleted,bidule,machin
Mais j'ai beau utiliser des regexp dans tous les sens, le résultat que j'obtiens n'est pas bon... J'imagine que c'est du aux quotes imbriquées, je ne sais pas comment lui indiquer la bonne expression. J'arrive à m'en sortir avec des regexp simples, mais là je cale.
Si jamais un champion des expressions régulières pouvait me venir en aide, il illuminerait ma journée, voire ma semaine
Merci bien
Hors ligne
#2 Le 10/12/2012, à 11:21
- pingouinux
Re : Expressions régulières et sed
Bonjour,
$ cat fichier
1) un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,machin
2) un truc,autre chose,"Let's Play Halo 3 Part 9.5 "Escape', High Charity",bidule,machin
$ sed -r s'/^([^"]*)".*",([^"]*)$/\1\2/' fichier
1) un truc,autre chose,bidule,machin
2) un truc,autre chose,bidule,machin
Ajouté : Plus simple
$ sed -r s'/".*",//' fichier
Dernière modification par pingouinux (Le 10/12/2012, à 11:41)
Hors ligne
#3 Le 10/12/2012, à 11:26
- cervo
Re : Expressions régulières et sed
Merci, mais :
1) j'aimerai remplacer le contenu, pas le supprimer, pour éviter de "casser" les colonnes du csv
2) ça ne fonctionne pas si la ligne comporte d'autre quotes
ex : un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,"pouet, toto",machin
=> se transforme en : un truc,autre chose,machin
Hors ligne
#4 Le 10/12/2012, à 11:49
- pingouinux
Re : Expressions régulières et sed
Sur la ligne n°2, les " " ne sont pas tous appariés.
$ sed -r s'/("[^"]*")+/deleted/g' fichier
1) un truc,autre chose,deleted,bidule,machin
2) un truc,autre chose,deletedEscape', High Charity",bidule,machin
3) un truc,autre chose,deleted,bidule,deleted,machin
Hors ligne
#5 Le 11/12/2012, à 16:41
- credenhill
Re : Expressions régulières et sed
hello
et avec ça ?
$ cat fichier
un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,machin
un truc,autre chose,"Let's Play Halo 3 Part 9.5 "Escape', High Charity",bidule,machin
un truc,autre chose,"Let's Play Halo 3 Part 9.5 ""Escape, High Charity""",bidule,"pouet, toto",machin
$
$ sed 's/,"/,+/g;s/",/+,/g;s/+[^+]*+/deleted/g' fichier
un truc,autre chose,deleted,bidule,machin
un truc,autre chose,deleted,bidule,machin
un truc,autre chose,deleted,bidule,deleted,machin
$
Hors ligne
Pages : 1