Vim: Технический подход

У меня есть 2500-строчный документ, который выводит таблицу (excel). Он согласован и повторяется около 100 раз в документе - хотя и не идеально повторяется в каждой строке, потому что данные за цикл немного меняются. На каждом (25-строчном) цикле я мог собрать как минимум 30 фрагментов информации для загрузки в пользовательский загрузчик, чтобы заполнить dbs на веб-сайте.

Моя первая мысль состоит в том, чтобы искать/заменять с помощью подкачки (*), чтобы правильно структурировать захваченные данные для моего использования при загрузке в мой собственный db, например:

data1:data2,data3a|data3b|data3c,data4:data5

На первый взгляд достаточно регистров vim, чтобы начать, добавить, а затем заменить и сбрасывать (перезаписывать) регистры до следующего цикла, а затем повторять. Но в будущем я, возможно, захочу расширить этот захват данных, что может привести к максимальному заполнению моих регистров (az, 0-9) и затруднит отслеживание того, что (считая разделителей). Поэтому я рассматриваю функции для передачи захваченного текста вместе с именем для его вызова (минуя идею замены/подстановки), чтобы быть установленным (пусть) для извлечения и правильного форматирования в конце каждого цикла. Я вижу такую функцию, как:

function SetVar(varname, varval)
 exe "let @".a:varname." = '".a:varval."'"
 endfunction

Я бы взял данные как:

:/sectionHeader/sectionFooter/g/(pieceOfInfo)/call SetVar('varname1',@)/

где sectionHeader и sectionFooter определяют часть (диапазон) циклирования в документе. Я бы, вероятно, использовал RegExps для захвата этих имен разделов и использования части имени для обозначения переменной (вместо varname1) - или, может быть, увеличивающейся переменной, такой как "i".

а затем отформатируйте окончательный вывод следующим образом:

varname1:varname2,varname3|varname4|varname5,varname6:varname7

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

Вопросов:

  1. Имеет ли это смысл и разумно ли это как архитектурный подход к этому решению?

  2. Можете ли вы предложить лучший подход?

1 ответ

Разве скрипт awk не был бы лучшим выбором для этого? Вы можете сделать одинаковый поиск и замену, а также иметь отдельный выходной файл, а операция "строка за строкой" awk должна избегать некоторых проблем, которые могут возникнуть при попытке сделать это в Vim.

Конечно, если вы никогда не повторите этот процесс, Vim, возможно, не плохой звонок.

licensed under cc by-sa 3.0 with attribution.