Как преобразовать файл * .txt (скопировать / вставить переменные) в табличный формат - PullRequest
0 голосов
/ 18 января 2019

У меня есть набор переменных (примерно 80), которые я копирую + вставляю в свой редактор (получаю эти переменные из другого файла * .txt). После этого это выглядит немного грязно, как

ka15 1-2 tre15 3-4 hsha15 5
juso15 6
kl15 7-9 kkjs15 10

но я бы хотел, чтобы он был структурирован, чтобы лучше понять, что происходит внутри кода. Я также должен убрать 15 из каждой переменной. В идеале я бы получил что-то вроде

ka     1-2   tre   3-4   hsha   5
juso   6     kl    7-9   kkjs   10

Есть ли умный способ добиться этого? Я использую SAS Enterprise Guide Editor и VSCode , но не смог найти способ. Например, когда я нахожу и заменяю 15, я бы хотел заменить его на вкладку, но не смог найти эту опцию ни в одном из редакторов. Есть идеи, чтобы автоматизировать это или, по крайней мере, не делать все вручную?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Я придумала 3 регулярных выражения, которые будут делать то, что вы хотите. Чтобы запустить их все последовательно, вам понадобится regreplace extension или аналогичный.

Это идет в ваших настройках:

"regreplace.on-save": false,

"regreplace.commands": [
  {
    "name": "Transform Data to Table Format, step 1",
    "regexp": "([a-zA-Z]+|[\\d-]+)(15)?(\\s[\r\n]?)*", 
    "replace": "$1      \n",
    "priority": 1,      
  },
  {
    "name": "Transform Data to Table Format, step 2",
    "regexp": 
      "(([\\S-] {6})(.*))|(([\\S-]{2} {5})(.*))|(([\\S-]{3} {4})(.*))|(([\\S-]{4} {3})(.*))",
    "replace": "$2$5$8$11",
    "priority": 2,
  },
  {
    "name": "Transform Data to Table Format, step 3",
    "regexp": 
      "((.*)\n)((.*)\n)((.*)\n)((.*)\n)((.*)\n)((.*?)(\\s*\\n))",
    "replace": "$2$4$6$8$10$12\n",
    "priority": 3,
  }
],

Создает правило для каждого из трех шагов регулярного выражения. Все три правила могут быть запущены последовательно с помощью команды regreplace.regreplace. Вот демо:

demo of regreplace command running on OP's data

Регулярные выражения разработаны так, чтобы хорошо выглядеть с элементами данных длиной до 4 символов, но их можно легко изменить для более длинных элементов.

На шаге 1 увеличьте количество пробелов перед \ n в правиле замены примерно до 16 или около того.

На шаге 2 вам нужно почувствовать структуру групп регулярных выражений, таких как (([\\S-]{4} {3})(.*), чтобы изменить их. Для переменной длиной 13 символов может потребоваться что-то вроде (([\\S-]{13} {3})(.*) в качестве последней группы и ([\\S-] {15})(.*)) в качестве первой в последовательности и т. Д., Изменяющие все остальные группы по порядку. Дайте мне знать, если вам нужна помощь с этим.

Шаг 3 не требует изменений, если только вы не хотите изменить количество элементов данных, отображаемых в каждой строке - сейчас есть 3 переменные с данными в каждой строке, следовательно, 6 групп в этом регулярном выражении.

Неважно, сколько пар данных и значений находится в какой-либо строке перед выполнением команды.

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

Во-вторых, расширение не может быть запущено только для выделенного текста, поэтому вам придется поместить данные в верхнюю часть пустого файла, чтобы преобразовать его, а затем скопировать в другое место, если хотите.]

Существует также расширение правил замены , которое работает как regreplace, но, в соответствии с документами, работает только на выборке, но у меня здесь не работает по неизвестной причине. Тем не менее, он имеет более приятный интерфейс - все регулярные выражения могут входить в единое правило, которое затем может запускаться независимо.

0 голосов
/ 18 января 2019

Я нашел хакерское решение вашей проблемы, если кто-нибудь найдет лучшее решение, я удалю мое, но здесь оно идет ¯\_(ツ)_/¯:

1) Копировать все содержимое файла (например, я дважды скопировал ваш):

ka15 1-2 tre15 3-4 hsha15 5
juso15 6
kl15 7-9 kkjs15 10
ka15 1-2 tre15 3-4 hsha15 5
juso15 6
kl15 7-9 kkjs15 10

2) Ctrl + H и заменить все 15 ничем (оставить пустым), используя Ctrl + Alt + Введите .

3) Ctrl + F и поворот Регулярные выражения в поле поиска. Теперь введите \s, чтобы выбрать пробел, и он должен выбрать один пробел после каждого слова. Теперь выберите все вхождения с помощью Alt + Введите и нажмите Backspace , а затем Enter . Это удалит пробелы между словами и поместит одно слово в одну строку кода следующим образом:

ka
1-2
tre
3-4
hsha
...

Нажмите Escape , чтобы удалить несколько курсоров.

4) Нажмите Ctrl + F еще раз и в поле поиска введите $ sign. Это выберет конец каждой строки. Снова нажмите Alt + Введите , чтобы выбрать все вхождения, нажмите Пробел 5-8 раз. Однако обратите внимание, что курсоры не выровнены должным образом. Нажмите Escape , чтобы удалить несколько курсоров.

Space

5) Поместите курсор в несколько пробелов от первого слова. Затем, удерживая Ctrl + Alt + , добавьте несколько курсоров ниже первого. Затем нажмите Shift + End , чтобы выделить все пробелы в конце каждой строки, и нажмите Delete , чтобы удалить его. Нажмите Удалить еще раз, чтобы выровнять все слова в одну строку, разделенные n пробелами.

Align all to one line

6) К сожалению, я не смог найти регулярное выражение для последней части. Курсор должен быть помещен после каждой 6-й переменной, но я решил ее, поместив курсор рядом с каждым 7-м словом и нажав Enter .

Last part


Обычно я не так много печатаю, но мне понравилась проблема, с которой вы столкнулись. Для меня это было больше загадкой, чем проблемой.

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