Notepad++ 中的转置函数

Posted

技术标签:

【中文标题】Notepad++ 中的转置函数【英文标题】:Transpose function in Notepad++ 【发布时间】:2013-12-01 11:02:44 【问题描述】:

我有一个文本文件:

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

我想输出为:

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

如何在 Notepad++ 中使用替换功能?

【问题讨论】:

我不确定 N++ 是否可行。你最好用脚本来做这样的转换。 【参考方案1】:

您可以使用以下快捷键在记事本++中进行转置

 Step 1: Ctrl + A: selects all.
 Step 2: Ctrl + J: Transpose the Row you selected

【讨论】:

感谢您分享此提示,因为早期提示使用正则表达式替换 \r\n 无效。 Ctrl+J 适用于我的 npp v7.8.6(win10 企业版 64 位)和另一个 npp v7.6.4(IT 部署的 win server 2019 以在 citrix 中使用) 请注意 Ctrl + JEdit > Line Operations > Join Lines 选项。来自@Noel 的Find and Replace 答案更笼统,在大多数情况下可以首选。【参考方案2】:
    使用框选择功能选择第二列文本。 使用 Alt+Shift+箭头键 选择第二列。 将选定的文本复制到一个新文件中。 使用查找/替换删除所有换行符。 Ctrl+F 打开查找/替换对话框。 选择扩展正则表达式搜索模式。 在 Find What 框中键入 \r\n。 将替换为框留空。 点击全部替换所有打开的文档。 现在,文本以单行显示。 从第二个文件复制文本并将其粘贴到第一个文件的第二行。

干杯...

【讨论】:

【参考方案3】:

如果你真的有这样一个固定的格式并且需要这样一个固定的输出,我通常会尝试使用即时宏。

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

在您的具体情况下,现在按:

结束 删除 位置1

结束点击停止按钮(或在菜单栏中宏 - 停止录制)。

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

【讨论】:

【参考方案4】:

Notepad++ 中没有用于转置矩阵的内置函数,您无法使用 Replace 来实现(正如 M42 指出的那样)。另外,我不知道任何相关的插件。所以你要么需要一个不同的编辑器,要么用一个脚本来做。我猜最简单的解决方案是使用电子表格,例如 Excel 或 OpenOffice,它们都允许您轻松转置表格。

但是,在不离开 Notepad++ 的情况下,还有一个不错的选择。是使用Python Script插件。

设置 Python 脚本插件

    Plugin Manager 或official website 安装Python Script 插件。 安装后,转到Plugins > Python Script > New Script。为您的新脚本选择一个文件名(例如transpose.py)并复制后面的第一个代码块并将第二个代码块复制到另一个脚本,例如称为transpose_uneven.py。 打开您的数据文件,然后运行Plugins > Python Script > Scripts > transpose.py。这将打开一个新标签页,其中包含您的数据转置。

转置.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,
,,,,

【讨论】:

以上是关于Notepad++ 中的转置函数的主要内容,如果未能解决你的问题,请参考以下文章

numpy中的转置Transpose和.T以及轴对换swapaxis

matlab中求矩阵的转置矩阵,是啥函数?

PostgreSQL中的转置表

SPSS中的转置

Oracle中的转置功能[重复]

Hive 中的转置数组