【问题标题】:find certain number digit and add character in notepad++找到某个数字并在记事本++中添加字符
【发布时间】:2016-11-15 03:13:47
【问题描述】:

我正在尝试使用 Notepad++ 查找具有错误数字的数字集并在其前面添加零以解决问题。

所以,我需要找到高于 2 位且低于 6 位的数字。然后加零变成6位数。

这必须在notepad++或批处理中完成,因为其他没有计算背景的人也需要运行它。

我尝试研究一些正则表达式,但无法找到填充最多 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

【问题讨论】:

标签: batch-file notepad++


【解决方案1】:

这不是一个很好的方法,但适用于少量的数字集。我用您的示例的 2150 行进行了测试,几乎立即完成。虽然开始在大约 100 万行时苦苦挣扎。它有效,但需要时间:

在 Notepad++ 中使用搜索和替换和搜索模式正则表达式搜索

\b([0-9]{3,5})\b

并替换为0\1

并点击Replace all 3 次。
因此,每个 3-5 位数字都将被其自身替换为前面的 0。替换所有 3 次时,您要确保偶数 3 位数字用 3 个前导零填充。

这又不是一个好方法,但对我有用...

编辑:刚刚看到它必须自动完成......也许notepad++有一些工具可以作为脚本执行搜索和替换,但我会把它留给其他人;)

又一个编辑:我实在忍不住了,我不得不找出来……我用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>

关闭记事本++。 转到%appdata%\Notepad++\ 并打开文件shortcuts.xml 使用普通文本编辑器(notepad++ 会将其覆盖回正常状态)并将上面的xml代码放在那里(应该已经有一个宏名为“Trim Trailing and Save”;只需将其放在结束 &lt;/Macro&gt; 标记下并保存即可。当您现在打开 Notepadd++ 并单击菜单栏中的宏时,应该会出现一个名为“MyUpdater”的名称。
当前快捷方式设置为 Alt + Shift + Space 但您可以通过单击 Macro -> Edit Shortcut 来更改它。

这对我有用,这样您就可以将 makro“导出”给其他用户。

要反转此操作,您可以搜索 \b([0]) 并将其替换为空字符串。请注意,您必须再次检查正则表达式!在这里点击全部替换就足够了。

如果有什么问题可以随时提问:)

【讨论】:

    【解决方案2】:
    @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 添加到最后 2 列中的每一列,这将产生一个数字 1000000..1999999。

    Echo 再次出现 %%a..%%c 的五列,以及 column5 和 column6 的最后 6 个字符

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

    如果 column3 可能是 1 位或 2 位,则

     SET /a column3=1000000+%%c
    

    是必需的,echo !column3:~-2! 代替 %%c。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2021-06-06
      相关资源
      最近更新 更多