如何在 Notepad++ 中按每行的长度对文本文件中的行进行排序?

hpa*_*nia 17 notepad++

如何在记事本++中按行长对文本文件进行排序?是否有可用于上述任务的插件?
如果没有插件,要阅读的第一个或第二个教程是什么,以便自己编写插件?

Dan*_*ane 9

这个答案的灵感来自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 来自动执行此操作。

  • 警告:这不是一个稳定的排序。换句话说,相同长度的行在排序后不一定以相同的顺序出现 - 相反,它们将按字典顺序排序。 (2认同)
  • 答案已更新以保留现有的排序顺序,假设这很重要。 (2认同)

sno*_*ude 3

不,我认为不存在。最接近的是 TextFx 插件,但这是基于字符的排序而不是基于行长度。最好的选择是将文本放入电子表格中并在那里对其进行排序(使用该LEN()函数使用单独的计算列)。