Notepad++中的转置函数

5

I have a text file as:

0xC1,0x80,
0x63,0x00,
0x3F,0x80,
0x01,0xA0,

I want output as:

Line1: 0xC1,0x63,0x3F,0x01,
Line2: 0x80,0x00,0x80,0xA0,

如何在Notepad++中使用replace函数来实现这个功能?

4
我不确定在N++中是否有可能做到这一点,最好使用脚本来完成这种转换。 - Toto
4个回答

6
您可以使用以下快捷键在Notepad ++中进行转置操作。
 Step 1: Ctrl + A: selects all.
 Step 2: Ctrl + J: Transpose the Row you selected

感谢分享这个技巧,因为早期使用正则表达式 \r\n 替换并没有起到作用。Ctrl+J 对于我的 npp v7.8.6 (64 位 win10 企业版) 以及另一个由 IT 部署在 citrix 中使用的 npp v7.6.4 (win server 2019) 都有效。 - Nasri Najib
1
请注意,Ctrl + J编辑 > 行操作 > 连接行 选项。来自 @Noel 的 查找和替换 答案更通用,在大多数情况下可以优先考虑。 - AlainD

5
  1. 使用框选功能选择第二列文本。
    • 使用Alt+Shift+箭头键选择第二列。
  2. 将所选文本复制到一个新文件中。
  3. 使用查找/替换功能删除所有换行符。
    • 使用Ctrl+F打开查找/替换对话框。
    • 选择扩展正则表达式搜索模式之一。
    • 查找内容框中键入\r\n
    • 保持替换为框为空白。
    • 点击在所有打开的文档中全部替换
    • 现在,文本已合并成单行。
  4. 从第二个文件中复制文本,并将其粘贴到第一个文件的第二行。

干杯...


4
在Notepad++中没有内置函数可以对矩阵进行转置,也无法使用“替换”来实现(正如M42所指出的)。同时,我也不知道任何相关的插件。因此,您需要选择另一个编辑器或者使用脚本来完成。最简单的解决方案是使用电子表格软件,比如Excel或者OpenOffice,它们都可以轻松地实现表格的转置。
但是,还有一种不错的替代方案可以在不离开Notepad++的情况下完成,那就是使用Python Script插件。
安装Python Script插件
1、从插件管理器或者官方网站下载并安装Python Script插件; 2、安装完毕后,进入“插件->Python Script->新建脚本”,选择一个文件名(例如transpose.py),将下面第一段代码复制到这个文件中,再把另一段代码复制到另一个脚本里,例如transpose_uneven.py; 3、打开数据文件,然后运行“插件->Python Script->脚本->transpose.py”,这将打开一个新选项卡,显示矩阵转置后的结果。
transpose.py:
delimiter=","
newline="\n"
content=editor.getText()
matrix=[line.split(delimiter) for line in content.rstrip(newline).split(newline)]
transposed=list(map(list, zip(*matrix)))
notepad.new()
for line in transposed:
    editor.addText(delimiter.join(line) + newline)
if len(transposed)!=len(matrix[0]):
    console.clear()
    console.show()
    console.write("Warning: some rows are of uneven length. You might consider using the transpose_uneven script instead.")

transpose_uneven.py

import itertools    
delimiter=","
newline="\n"    
content=editor.getText()
matrix=[line.split(delimiter) for line in content.rstrip(newline).split(newline)]
transposed=list(map(list, itertools.izip_longest(*matrix, fillvalue="")))
notepad.new()
for line in transposed:
    editor.addText(delimiter.join(line) + newline)

示例

transpose.py 脚本将转置以下示例:

0xC1,0x80,
0x63,0x00,
0x3F,0x80,
0x01,0xA0,

致:

0xC1,0x63,0x3F,0x01
0x80,0x00,0x80,0xA0
,,,

如果您的某些行不平均:
0xC1,0x80,
0x63,0x00,
0x3F,0x80,
0x01,0xA0,
0x02

不平衡的列将被相应地舍弃:
0xC1,0x63,0x3F,0x01,0x02

如果不想要这样的结果,使用 transposed_uneven.py ,它会返回:
0xC1,0x63,0x3F,0x01,0x02
0x80,0x00,0x80,0xA0,
,,,,

0

如果您确实有这样的固定格式并需要这样的固定输出,我通常会尝试使用即时宏来处理。

所以我的光标位于文件左上角,准备进行操作,然后我按下录制按钮(或在菜单栏中选择宏 - 开始录制)。

在您特定的情况下,请按以下步骤:

  • End
  • Del
  • Pos1

按下停止按钮(或在菜单栏中选择宏 - 停止录制)。

现在进行第一次测试,按下播放按钮(或在菜单栏中选择宏 - 播放),并测试是否有效。如果是,请单击宏 - 多次运行宏并选择运行到文件结尾


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接