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 + J
是 Edit > 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++ 中的转置函数的主要内容,如果未能解决你的问题,请参考以下文章