2

У меня есть большой файл CSV, который должен иметь два поля. Это должно выглядеть в основном так:

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

Проблема в том, что кавычки в строке 3 отсутствуют, и таких строк много. Я записал макрос, чтобы сделать следующее:

  • Перейти к началу строки
  • Перейти к месту сразу после первой запятой
  • Вставьте кавычку
  • Перейти к концу строки
  • Добавить кавычку

Однако даже с этим макросом мне приходится вручную сканировать файл, воспроизводя его по строкам с несколькими запятыми. Я не могу сделать это на каждой строке, потому что это не действительный CSV.

Что мне нужно, так это команда подстановки, которая говорит: «для строк с несколькими запятыми ставьте кавычки после первой запятой и кавычки в конце строки».

Кто-нибудь хочет покачаться на этом?

2 ответа2

3

Вот более короткая команда без каких-либо групп захвата. Он использует & чтобы повторить предыдущий матч. Есть две команды, разделенные | , Первый добавляет кавычку после первого «,» и пробелы, которые следуют за ней, если таковые имеются. Второй добавляет цитату в конце строки.

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

Конечно.

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

g/,.*,/ ищет любую строку, содержащую не менее двух запятых. Команда замены ищет запятую, за которой следуют ноль или более пробелов, и помещает ее в буфер совпадений № 1, а затем помещает все остальное в строке в буфер совпадений № 2. Наконец, команда замены заменяет эти два совпадения на первое совпадение, а затем второе совпадение, заключенное в кавычки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .