如何在 notepad++ 中按行长对文本文件进行排序?是否有可用于上述任务的插件?
如果没有插件,要自己编写插件,应该阅读的第一个或第二个教程是什么?
答案1
这个答案的灵感来自于Youtube 视频. 如果这很重要,请更新以保持原始排序顺序。
Notepad++ 有一个内置的 TextFX 工具,可以按字母顺序对选定的行进行排序。可以通过在每行左侧放置空格并确保所有行的长度相同,来劫持此工具以按行的长度进行排序。
“The Zoo” 按字母顺序排在“Their House”之前,因为空格被视为字符并位于“i”之前。__X
(假装下划线实际上是空格)同样按字母顺序排在 之前_XX
。这个答案中的想法是添加空格和行号,以便__________092dog
将其排在 上方_003alligator
。
我将使用以下内容作为示例数据:
Lorem
ipsum
dolor
sit
amet
consectetur
adipisicing
步骤1.添加行号。
(barlop 添加的注释 - 关于此步骤的读者注释,我们不会根据这些行号进行排序,而是根据行的长度进行排序。但添加行号的原因是为了让我们知道自然顺序,这样当例如两行以上行的长度相等时,我们可以按照自然顺序对这些行进行排序)
假设您的文本文件仅包含数据,请将文本光标(垂直线)放在文件的第一个位置。然后在菜单中Edit
选择Column Editor...
(Alt+ C)。选择“要插入的数字”,从 1 开始,以 1 为增量,并包含前导零。请注意,从最短字符串到最长字符串排序时,这将保留原始顺序。首先反转所有行如果您想从最长到最短进行排序。
1Lorem
2ipsum
3dolor
4sit
5amet
6consectetur
7adipisicing
第 2 步. 在所有行中添加前导空格。
将文本光标(垂直线)放在文件的第一个位置。然后在菜单中Edit
选择Column Editor...
(Alt+ C)。插入足够的空格,以便最短的数据行可以填充到最长的数据行的长度。如果最短的行有 4 个字符,而最长的行有 44 个字符,那么请确保插入至少 40 个空格。
__________1Lorem
__________2ipsum
__________3dolor
__________4sit
__________5amet
__________6consectetur
__________7adipisicing
步骤3.将线条修剪至均匀的长度。
使用以下正则表达式查找/替换(Ctrl+ H)来匹配等于或超过最长数据行长度的右侧字符。
^.*(.{50})$
用 替换全部$1
。这将修剪除每行最右边的 50 个字符之外的所有内容。如果您的数据长于(或短于)50,请{50}
在正则表达式中调整 。
(barlop 补充的注释——这里的想法是,最短的行在开头有最多的空格)
_______1Lorem
_______2ipsum
_______3dolor
_________4sit
________5amet
_6consectetur
_7adipisicing
步骤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
步骤5.删除前导空格。
使用另一个正则表达式查找/替换(Ctrl+ H)来匹配前导空格。
^ *\d{4}
这是插入符号和星号之间的空格。将全部替换为空。如果您有 4 位行号,这将删除所有前导空格和插入的行号。将{4}
行号中的 替换为正确的位数。
sit
amet
Lorem
ipsum
dolor
consectetur
adipisicing
宏观
我使用 Notepad++ 的宏功能记录了上述步骤,但不起作用。我不确定哪个步骤失败了,但我还没有诊断出原因。如果你反复这样做,你也许可以使用 AutoHotKey 来自动执行此操作。
答案2
不,我认为没有。最接近的是 TextFx 插件,但它是基于字符的排序,而不是基于行长的排序。最好的办法是将文本放入电子表格中并在那里进行排序(使用函数的单独计算列LEN()
)。
答案3
您可以使用N++ 中的 SQL在 CSV 文件中!例如,如果您有:
col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;
,您可以执行命令select * from data order by length(col1) desc
按降序排序。“数据”表示当前文件。“col1” - 第一列(也是最后一列)的名称。
不幸的是,可能存在一个错误,不允许放弃单列文本行后的分隔符。
答案4
将数据粘贴到 MS Access 数据库中 - 粘贴到包含一个文本和一个整数的表中。将源文件中的文本行粘贴到 Access 文本字段中(设置一个带有一个字段的查询,然后从顶部粘贴)。任何长度超过 255 个字符的行都将重定向到错误文件,作为“备忘录”字段 - 现在称为“长文本”
使用文本字段中的文本长度更新整数字段 - 更新查询
按长度和文本字段排序 - 将文本列剪切/粘贴回源文件
我经常对目录或 URL 列表进行这样的操作,阅读说明所花的时间比粘贴数据、运行更新以获取长度等所花的时间要长。我正在尝试使用 Access 脚本封装整个过程
我使用 Notepad++ 作为我的编辑器。