энергия, переформатируйте текст для программирования

У меня есть большой файл со строками, которые похожи

2 Никаких маршрута к указанной транзитной сети

3 Никаких маршрута месту назначения

И я хотел бы преобразовать это для использования на языке программирования к

{2, "Никакой маршрут к указанной транзитной сети"},

{3, "Никакой маршрут месту назначения"},

Как я сделал бы это?

3
задан 02.09.2009, 12:28

4 ответа

Основное преобразование,

sed 's|^\([0-9]\)\(.*\)|{\1,"\2"}|g' file.txt > file2.txt

в vim,

:%s/\([0-9] \(.*\)/{\1,"\2"}/g

Это покроет строки, запускающиеся с формата,

N text on the line...

Где N единственное число цифры.
Может быть расширен далее для других форм.

8
ответ дан 07.12.2019, 22:53

Эта команда энергии делает то, что Вы хотите?

%s/^\(.\)\ \(.*\)$/{\1,\ "\2"},/g
1
ответ дан 07.12.2019, 22:53
:%s/^\s*\(\d\+\)\s\+\(\S.\{-}\)\s*$/{\1, "\2"}/
1
ответ дан 07.12.2019, 22:53

В Вашем случае простое регулярное выражение достаточно (и лучшее решение). Однако в некоторых других случаях, записывая макрос могло бы быть лучше.

Существует простой макро-пример в документации энергии, разделите 12.1, и дальнейшее описание в :help q

Вкратце:

  1. Ввести q сопровождаемый буквой (буква register где макрос будет зарегистрирован).
  2. Сделайте некоторые команды, измените свой текст по мере необходимости, используйте все питание Vim.
  3. Переместите курсор в следующую строку.
  4. Пресса q прекратить записывать.

Для проигрывания макроса нажать @ сопровождаемый буквой, где макрос был зарегистрирован. Для воспроизведения последнего макроса нажать @@. Введите число прежде, чем играть макрос для повторения его как много раз по мере необходимости.

Так, в Вашем случае, для преобразования строк как это:

2 No route to specified transit network
{2, "No route to specified transit network"},
  1. Расположите свой курсор в одну из строк.
  2. Пресса qa (выбор регистра a было произвольно).
  3. Нажмите точно это (включая кавычки и пробелы) I{<esc>f cl, "<esc>A"},<esc>j
  4. Пресса q прекратить записывать.
  5. Пресса 100@a и будьте счастливым наблюдением играемого макроса.:-)

Я оставлю читателю объяснение каждой команды от шага 3.;-)

Конечно, это не единственное решение. Вы, возможно, сделали шаг 3 по-разному.

4
ответ дан 07.12.2019, 22:53

Теги

Похожие вопросы