6

我正在使用 Notepad++ 编辑一个编码不良的文本文件。该程序没有考虑用户的 AZERTY 键盘布局。结果是一个文本文件如下(我编的例子)

Hi guysm this is Qqron<
I zonder zhen ze cqn go to the szi;;ing pool together
:y phone nu;ber is !%%)@!#@@#(
Cqll ;e/

我需要按如下方式批量替换字符

a > q

q > a

[/0] > 0 

! > 1

和其他几个

是否可以创建要替换的字符表?我有点初学者,我不知道 Notepad++ 是否允许运行脚本

4

3 回答 3

1

Notepad++ 有一个宏记录器,但宏不能用任何文档化的嵌入式语言编写。您可能会记录一个执行 70 次左右搜索和替换操作的宏。请参阅此说明。这里有一些关于“破解”宏语言的信息

显然 Notepad++ 不适合这项任务。Python 解决方案还可以,但 Perl 最初是为类似这样的东西而设计的。这是一个单线。这适用于 Windows。在 bash/Linux 中,将双引号替换为单引号。

perl -n -e "tr/aqAQzwZW;:!@#$%^&*()m\/</qaQAwzWZmM1234567890:?./;print"

它将执行@kreativitea 的解决方案所做的事情(我使用了他的翻译字符串),读取标准输入并打印到标准输出。

于 2013-08-20T01:30:28.723 回答
0

我不知道记事本++。但是如果你的机器上安装了 python,你可以使用这个小脚本。

source = """Hi guysm this is Qqron<                                           
I zonder zhen ze cqn go to the szi;;ing pool together                         
:y phone nu;ber is !%%)@!#@@#(                                                
Cqll ;e/"""                                                                   

replace_dict = {'a': 'q', 'q': 'a', '[/0]': '0', '!': '1'}                    

target = ''                                                                   
for char in source:                                                           
    target_char = replace_dict.get(char)                                      
    if target_char:                                                           
        target += target_char                                                 
    else:                                                                     
        target += char                                                        

print target

只需自定义 replace_dict 变量以满足您的需要。

于 2013-08-13T04:55:03.700 回答
0

所以,AZERTY 布局有很多种,所以这不是一个完整的答案。但是,它确实通过了您的测试用例,并且与在 python 中完成任何单个字符替换一样快(除非您还需要考虑unicode

from string import maketrans

test = '''Hi guysm this is Qqron<
I zonder zhen ze cqn go to the szi;;ing pool together
:y phone nu;ber is !%%)@!#@@#(
Cqll ;e/'''

# warning: not a full table.  
table = maketrans('aqAQzwZW;:!@#$%^&*()m/<', 'qaQAwzWZmM1234567890:?.')

test.translate(table)

因此,只要您了解您的用户使用的是什么版本的 AZERTY,就应该没问题。只需确保正确填写转换表,其中包含 AZERTY 实现的详细信息。

于 2013-08-13T05:41:54.160 回答