如何在记事本++中按行长对文本文件进行排序?是否有可用于上述任务的插件?
如果没有插件,要阅读的第一个或第二个教程是什么,以便自己编写插件?
这个答案的灵感来自YouTube 视频。更新以保持原始排序顺序(如果这很重要)。
Notepad++ 有一个内置的 TextFX 工具,可以按字母顺序对选定的行进行排序。通过在每行的左侧放置空格并确保所有行的长度相同,可以劫持此工具以按行的长度排序。
“The Zoo”按字母顺序排在“他们的房子”之前,因为该空间被视为一个字符并排在“i”之前。__X
(假装下划线真的是空格)同样会按字母顺序排在_XX
. 这个答案的想法是添加空格和行号,以便__________092dog
将它们排序在上面_003alligator
。
我将使用以下作为示例数据:
Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing
Run Code Online (Sandbox Code Playgroud)
步骤 1. 添加行号。
(barlop添加的注释-这是给读者的关于这一步的注释,我们不会根据这些行号进行排序,而是根据行的长度进行排序。但是添加行号的原因是我们知道自然顺序,例如,当两条以上的线长度相等时,我们可以根据该自然顺序对这些线进行排序)
假设您的文本文件中只有数据,将文本光标(垂直线)放在文件的第一个位置。然后在Edit
菜单中选择Column Editor...
( Alt+ C)。选择“要插入的数字”并从 1 开始,增加 1,并包括前导零。请注意,从最短字符串到最长字符串排序时,这将保留原始顺序。如果要从最长到最短排序,请先反转所有行。
1Lorem
2ipsum
3dolor
4sit
5amet
6consectetur
7adipisicing
Run Code Online (Sandbox Code Playgroud)
步骤 2. 用前导空格填充所有行。
将文本光标(垂直线)置于文件的第一个位置。然后在Edit
菜单中选择Column Editor...
( Alt+ C)。插入足够的空格,以便将最短的数据行填充到最长的数据行的长度。如果最短的一行有 4 个字符,最长的一行有 44 个字符,那么请确保至少插入 40 个空格。
__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing
Run Code Online (Sandbox Code Playgroud)
步骤 3. 将线条修剪成统一的长度。
使用以下正则表达式查找/替换 ( Ctrl+ H) 匹配等于或超过最长数据行长度的右侧字符。
^.*(.{50})$
Run Code Online (Sandbox Code Playgroud)
全部替换为$1
. 这将修剪除每行最右边的 50 个字符之外的所有内容。如果您的数据长(或短)于 50,请调整{50}
正则表达式中的 。
(注释由 barlop 添加 - 这里的想法是最短的行在开头有最多的空格)
_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing
Run Code Online (Sandbox Code Playgroud)
步骤 4. 对线条进行排序。
选择所有文本 ( Ctrl+ A)。通过 TextFX 菜单,转到Text FX > TextFX Tools > Sort lines case sensitive (at column)
。您的数据现在应该按长度顺序排列,从最短到最长。如果您希望它们按从最长到最短的顺序排列,请Text FX > TextFX Tools > + Sort ascending
在排序前取消选中该选项。注意行号也是如何反转的。
_________4sit
________5amet
_______1Lorem
_______2ipsum
_______3dolor
_6consectetur
_7adipisicing
Run Code Online (Sandbox Code Playgroud)
步骤 5. 删除前导空格。
使用另一个正则表达式查找/替换 ( Ctrl+ H) 来匹配前导空格。
^ *\d{4}
Run Code Online (Sandbox Code Playgroud)
这是插入符号和星号之间的空格。全部替换为空。如果您有 4 位行号,这将删除所有前导空格和插入的行号。用{4}
行号中的正确位数替换。
sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing
Run Code Online (Sandbox Code Playgroud)
宏
我用Notepad++的宏功能记录了上面的步骤,还是不行。我不确定哪一步失败了,但我还没有诊断出原因。如果您重复执行此操作,您可能可以使用 AutoHotKey 来自动执行此操作。
不,我认为不存在。最接近的是 TextFx 插件,但这是基于字符的排序而不是基于行长度。最好的选择是将文本放入电子表格中并在那里对其进行排序(使用该LEN()
函数使用单独的计算列)。