找到一定的数字,并在记事本++中添加字符

时间:2016-11-15 03:13:47

标签: batch-file notepad++

我正在尝试使用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

2 个答案:

答案 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

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q40601412.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

将文件和标记读取为token1..token5至%% a .. %% e

为最后两列中的每一列添加1000000,每列将产生一个数字1000000..1999999。

Echo五列再次出现,%% a .. %% c代表它们,以及column5column6

中每一个的最后6个字符

间距取决于你。由于字段都是固定长度(1,1,2,6,6),因此请在echo行中根据需要使用空格或制表符。

如果column3可能是1位或2位数,那么

 SET /a column3=1000000+%%c

是必填项, echo !column3:~-2!代替%%c

相关问题