Vim golf: corrija um CSV quebrado

2

Eu tenho um arquivo CSV grande que deve ter dois campos. Deve parecer basicamente assim:

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

O problema é que as aspas na linha 3 estão faltando, e há muitas linhas como essa. Eu gravei uma macro para fazer o seguinte:

  • Ir para o começo de uma linha
  • Mover para o local logo após a primeira vírgula
  • Insira uma aspa
  • Ir para o final da linha
  • Anexe uma aspa

No entanto, mesmo com essa macro, tenho que varrer manualmente o arquivo, reproduzindo-o em linhas com várias vírgulas. Não consigo fazer isso em todas as linhas, porque não é um CSV válido.

O que eu gostaria é de um comando de substituição que diga: "para linhas com mais de uma vírgula, coloque uma cotação após a primeira vírgula e uma cotação no final da linha "

Alguém se preocupa em fazer isso?

    
por Nathan Long 21.01.2011 / 23:00

2 respostas

3

Aqui está um comando mais curto sem nenhum grupo de captura. Ele usa & para repetir a correspondência anterior. Existem dois comandos separados por | . A primeira adiciona a citação após o primeiro "," e os espaços que a seguem, se houver. O segundo adiciona uma citação no final da linha.

:g/,.*,/s/, */&"/|s/$/"/
    
por 22.01.2011 / 04:05
2

Claro.

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

O g/,.*,/ procura por qualquer linha contendo pelo menos duas vírgulas. O comando substituto procura por uma vírgula seguida por zero ou mais espaços e coloca isso no buffer de correspondência # 1, depois coloca todo o restante da linha no buffer de correspondência # 2. Por fim, o comando substituto substitui essas duas correspondências pela primeira correspondência, depois a segunda correspondência entre aspas.

    
por 21.01.2011 / 23:21

Tags