如何将* .txt文件(复制/粘贴的变量)转换为表格格式

时间:2019-01-18 13:51:13

标签: regex visual-studio-code format

我有一堆变量(大约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企业指南编辑器 VSCode ,但是找不到方法。例如,当我找到并替换15个时,希望可以用一个选项卡替换它,但是在两个编辑器中都找不到该选项。有什么想法可以自动化吗?或者至少不手工做任何事情?

2 个答案:

答案 0 :(得分:1)

我找到了解决您问题的解决方案,如果有人找到更好的解决方案,我会删除我的,但在这里¯\_(ツ)_/¯

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 ,并使用 Ctrl将所有15替换为空(保留为空) + Alt + 输入

3) Ctrl + F 并在搜索框中打开正则表达式。现在,键入\s以选择空白,它应该在每个单词之后选择一个空白。现在,使用 Alt + Enter 选择所有出现的位置,然后按 Backspace ,然后按 Enter 。这样会删除单词之间的空格,并将一个单词放在一行代码中,如下所示:

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

Escape 可以删除多个光标。

4)再次按 Ctrl + F ,然后在搜索框中键入$符号。这将选择每行的结尾。再次按 Alt + Enter 选择所有出现的位置,然后按 Space 5-8次。但是请注意,光标未正确对齐。按 Escape 删除多个光标。

Space

5)将光标放在第一个单词的几个空格处​​。然后,按住 Ctrl + Alt + 在第一个光标下面添加多个光标。然后,按 Shift + End 选择每行末尾的所有空白,然后按 Delete 删除它。再次按 Delete 将所有单词排成一行,并用n空格隔开。

Align all to one line

6)不幸的是,我找不到最后一部分的正则表达式。光标应放置在每个第6个变量之后,但我通过将光标放置在每个第7个单词旁边并按 Enter 来解决。

Last part


我通常不会像这样输入太多,但我喜欢您遇到的问题。对我来说,这比难题还多。

答案 1 :(得分:1)

我想出了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个组。

在运行命令之前,任何一行中有多少个数据值对都没有关系。

[需要注意的两点:在数据开始之前不应有任何空行,尽管如有必要,您可以将正则表达式作为删除空行的第一条规则。数据内或末尾的空行不是问题。

第二,该扩展名不能仅在选定的文本上运行,因此您必须将数据放置在一个空文件的顶部以进行转换,然后将其复制到其他位置。]

还有一个replace rules extension,其作用类似于regreplace,但根据文档只能在一个选择上运行,但由于某些未知原因,它对我不起作用。但是它确实具有更好的界面-所有正则表达式都可以纳入一条规则,然后可以独立运行。