如何在Notepad ++中按行长对文本文件进行排序?是否有可用于上述任务的插件?
如果没有插件,为了编写插件Myself,应该阅读的第一本和第二本教程是什么?
如何在Notepad ++中按行长对文本文件进行排序?是否有可用于上述任务的插件?
如果没有插件,为了编写插件Myself,应该阅读的第一本和第二本教程是什么?
Answers:
这个答案的灵感来自YouTube视频。更新以保持原始排序顺序(如果重要)。
Notepad ++具有内置的TextFX工具,可按字母顺序对选定的行进行排序。通过在每行的左侧放置空格,并确保所有行的长度相同,可以劫持该工具以按行的长度排序。
“动物园”按字母顺序位于“他们的房子”之前,因为该空间被视为字符,并且位于“ 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来自动执行此操作。
^ *\d{5}
或使用任何数字位数作为行号。
不,我不认为有。最接近的是TextFx插件,但这是基于字符的排序,而不是基于行长的排序。最好的选择是将文本放入电子表格中并在其中排序(使用该LEN()
函数使用单独的计算列)。
col1;
hgfhfghfhg;
khjfhgfhfghfgh;
kjhfhgfhfhgfghfhf;
lkjgjghjhg;
lkjgjg;
,您可以执行命令select * from data order by length(col1) desc
以降序排列。“数据”是指当前文件。“ col1”-第一(和最后)列的名称。
不幸的是,可能存在一个错误,该错误不允许在单列文本的行后放弃定界符。