【问题标题】:MarcEdit append 001 fieldMarcEdit 追加 001 字段
【发布时间】:2017-04-24 13:53:07
【问题描述】:

我有一个 .mrk 文件,其中包含超过 5,000 条记录,所有记录都包含重复的 001 字段。

我目前的想法是使用 Notepad++、PowerShell 或 VBS,在以 =001 开头的任何行的末尾附加其行号,替换:

=001 20110708095140328

=001 2011070809514032800002

使用 Notepad++ 我可以找到以 =001 开头的每一行,使用 (\n=001 .*)\r

但我不知道Notepad++的Regex或者TextFX是否可以替换为行号。

【问题讨论】:

  • 忽略我之前的评论,看起来 TextFX 实现了这一点。我目前正在查看法语文档,我会尝试找到一个英文文档并发布答案。
  • Welp 我找不到任何东西,我现在也无法安装 TextFX 来尝试解决方案。 Here 是我提到的法语文档,如果你向下滚动,你会注意到有一个“插入行号”功能。没有额外的描述,所以我猜这是一个没有参数的动作,它将在每行的开头插入行号。然后您必须使用正则表达式来 1)从不以 =001 开头的行中删除此行号,以及 2)将行号移动到以 =001 开头的行的末尾以尊重您的格式。
  • 为什么不连续替换重复的001?我的意思是像001002 等等?这可以通过编程方式完成。正则表达式仅有助于模式匹配和替换为固定字符串。
  • Rahul,我无法替换 001、002 等。这些是 Marc 标准的“标题”。我也希望避免编码。

标签: regex powershell append notepad++ richtextfx


【解决方案1】:

作为我提到但无法测试的 TextFX 解决方案的替代方案,有一种方法可以在没有任何插件的情况下使用列编辑器(Edit->Column Editor 或 Alt-C )。

首先,选择要插入行号的列。如果您的行是固定宽度的,您可以直接将其插入到所需的位置,否则我建议插入到第一列。要选择列,请在文件第一行的所需列上按 Alt-Shift 使用列模式编辑,然后单击所需的列最后一行。您将在选定的行上看到一个 0 宽度的选择,输入字母会在此列的每一行上写上它们。

这里我们不打算自己写任何东西,而是打开上面提到的列编辑器并选择插入一个从 1 开始的数字,以 1 递增。您还需要选中“前导零”复选框,以便数字是固定宽度的。

如果您从以下内容开始:

bla
bla
X bla
bli
bla
X blu
bli

你最终会得到这个:

1bla
2bla
3X bla
4bli
5bla
6X blu
7bli

此时,您可以使用一两个正则表达式轻松获得您想要的结果:

  • 您想从不以 =001 开头的行中删除行号:使用前瞻匹配未跟随 =001 的行号

  • 如果您的行不是固定宽度,您必须在开头插入行号,并希望将其移动到末尾:使用捕获组分别匹配行号和其余部分线,并通过反转它们的顺序来重建线。

【讨论】:

    【解决方案2】:

    这在 Notepad++ 中有点棘手。但如果你保持耐心,值得一试。

    第 1 步: 在 Notepad++ 中打开文件并转到 编辑 -> 列编辑器。快捷键是 Alt + C

    第 2 步:添加以下值。如果需要,请记住选择Leading Zeros。按 OK 就完成了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      • 2015-05-14
      • 2011-10-13
      • 2014-07-12
      • 2019-05-09
      • 1970-01-01
      相关资源
      最近更新 更多