3 votes

Vim golf : Corriger un CSV cassé

J'ai un gros fichier CSV qui est censé contenir deux champs. Il devrait ressembler à ceci :

1234, Some series of words
539345, Something else
2039, "quotes are, of course, necessary here"

Le problème est que les guillemets de la ligne 3 sont manquants, et qu'il y a beaucoup de lignes comme celle-ci. J'ai enregistré une macro pour faire ce qui suit :

  • Aller au début d'une ligne
  • Déplacez-vous à l'endroit juste après la première virgule.
  • Insérer un guillemet
  • Aller à la fin de la ligne
  • Ajouter un guillemet

Cependant, même avec cette macro, je dois parcourir manuellement le fichier, en le relisant sur des lignes comportant plusieurs virgules. Je ne peux pas le faire sur chaque ligne, car ce n'est pas un CSV valide.

Ce que j'aimerais, c'est un commande de substitution qui dit : "pour les lignes comportant plus d'une virgule, placez un guillemet après la première virgule et un guillemet à la fin de la ligne."

Quelqu'un veut bien y jeter un coup d'œil ?

4voto

Damian Powell Points 315

Voici une commande plus courte sans groupes de capture. Elle utilise & pour répéter le match précédent. Il y a deux commandes séparées par | . La première ajoute le guillemet après le premier "," et les espaces qui le suivent, le cas échéant. La seconde ajoute un guillemet à la fin de la ligne.

:g/,.*,/s/, */&"/|s/$/"/

1voto

Unnati Gutpa Points 11

Bien sûr.

:g/,.*,/s/\(, *\)\(.*\)/\1"\2"/

El g/,.*,/ recherche toute ligne contenant au moins deux virgules. La commande de substitution recherche une virgule suivie de zéro espace ou plus et la place dans le tampon de correspondance n° 1, puis place tout le reste de la ligne dans le tampon de correspondance n° 2. Enfin, la commande de substitution remplace ces deux correspondances par la première correspondance, puis par la deuxième correspondance entre guillemets.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X