我正在尝试使用Notepad ++查找错误数字的数字集,并在其前面添加零以解决问题。
所以,我需要找到高于2位且低于6位的数字。然后加零,使其成为6位数。
这必须在记事本++或批处理中完成,因为没有计算背景的其他人也需要运行它。
我尝试研究一些正则表达式,但无法想出一个最好填充6位数的方法。
以下是我需要自动完成的一些示例:
1 1 21 10121 416138
1 1 22 10122 574158
1 1 23 10123 43218
1 1 24 10124 58157
1 1 25 10125 5880
1 1 26 10126 127144
到
1 1 21 010121 416138
1 1 22 010122 574158
1 1 23 010123 043218
1 1 24 010124 058157
1 1 25 010125 005880
1 1 26 010126 127144
答案 0 :(得分:0)
这不是一个非常好的方法,但是用于少量的数字集。我测试了你的例子中的2150行,它几乎立即完成。开始在大约100万行挣扎。它有效,但需要时间:
在Notepad ++中使用搜索和替换搜索模式正则表达式搜索
\b([0-9]{3,5})\b
并替换为0\1
并点击Replace all
3次
因此,每个3-5位数字将被其自身替换为前面的0。当更换所有3次时,你确保连3个数字都填满3个前导零。
再次不是一个好方法,但为我工作......
编辑:刚看到它必须自动完成...也许notepad ++有一些工具来执行搜索并替换为脚本,但我会把它留给其他人;)
又一个编辑:我无法自拔我必须找到它...我使用记事本++的宏功能来记录上面解释的S& R的过程并查找你可以找到你保存的宏的位置...
结果是:
<Macro Key="32" Shift="yes" Alt="yes" Ctrl="no" name="MyUpdater">
<Action sParam="" lParam="0" wParam="0" message="1700" type="3"/>
<Action sParam="\b([0-9]{3,5})\b" lParam="0" wParam="0" message="1601" type="3"/>
<Action sParam="" lParam="2" wParam="0" message="1625" type="3"/>
<Action sParam="0\1" lParam="0" wParam="0" message="1602" type="3"/>
<Action sParam="" lParam="768" wParam="0" message="1702" type="3"/>
<Action sParam="" lParam="1609" wParam="0" message="1701" type="3"/>
<Action sParam="" lParam="0" wParam="0" message="1700" type="3"/>
<Action sParam="\b([0-9]{3,5})\b" lParam="0" wParam="0" message="1601" type="3"/>
<Action sParam="" lParam="2" wParam="0" message="1625" type="3"/>
<Action sParam="0\1" lParam="0" wParam="0" message="1602" type="3"/>
<Action sParam="" lParam="768" wParam="0" message="1702" type="3"/>
<Action sParam="" lParam="1609" wParam="0" message="1701" type="3"/>
<Action sParam="" lParam="0" wParam="0" message="1700" type="3"/>
<Action sParam="\b([0-9]{3,5})\b" lParam="0" wParam="0" message="1601" type="3"/>
<Action sParam="" lParam="2" wParam="0" message="1625" type="3"/>
<Action sParam="0\1" lParam="0" wParam="0" message="1602" type="3"/>
<Action sParam="" lParam="768" wParam="0" message="1702" type="3"/>
<Action sParam="" lParam="1609" wParam="0" message="1701" type="3"/>
</Macro>
关闭Notepad ++。
转到%appdata%\Notepad++\
并使用普通的texteditor打开文件shortcuts.xml
(记事本++会将其覆盖回正常状态)并将xml代码从上面放入其中(应该已经存在)是一个名为&#34; Trim Trailing and Save&#34;的宏;只需将它放在结束</Macro>
标签下并保存。当你打开Notepadd ++并点击菜单栏中的Macro时,应该有一个叫&#34; MyUpdater&#34;。
目前,快捷方式设置为 Alt + Shift + Space ,但您可以单击宏来更改它 - &gt;编辑快捷方式。
这对我有用,你可以&#34;出口&#34; makro给其他用户。
要反转此操作,您可以搜索\b([0])
并将其替换为空字符串。请注意,您必须再次检查正则表达式!只需点击一次全部替换即可。
如果还有什么可以随意问:)
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q40601412.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqtokens=1-5" %%a IN ("%filename1%") DO (
SET /a column4=1000000+%%d
SET /a column5=1000000+%%e
ECHO %%a %%b %%c !column4:~-6! !column5:~-6!
)
)>"%outfile%"
GOTO :EOF
您需要更改sourcedir
和destdir
的设置以适合您的具体情况。
我使用了一个名为q40601412.txt
的文件,其中包含我的测试数据。
生成定义为%outfile%
的文件将文件和标记读取为token1..token5至%% a .. %% e
为最后两列中的每一列添加1000000,每列将产生一个数字1000000..1999999。
Echo
五列再次出现,%% a .. %% c代表它们,以及column5
和column6
间距取决于你。由于字段都是固定长度(1,1,2,6,6),因此请在echo
行中根据需要使用空格或制表符。
如果column3可能是1位或2位数,那么
SET /a column3=1000000+%%c
是必填项, echo !column3:~-2!
代替%%c
。