【问题标题】:Correct multiple strings between two delimiters in a file更正文件中两个分隔符之间的多个字符串
【发布时间】:2016-07-29 19:06:32
【问题描述】:

我在创建批处理文件时遇到问题,该文件将为我更正一些文本文件。所以我需要你的建议。 我需要获取字段 |No=xxx| 中的数据数字格式,没有任何字母字符、特殊字符或空格

我正在寻找可以完成这项工作的批处理代码,因为我有很多文件都存在这个问题。

文本文件(input.txt)是这样制作的:

|Job=1|Typ=S|Action=Order|No=531.04220440.00|
|Job=1|Typ=P|Action=Information|M=1|
|Job=2|Typ=S|Action=Order|No=ALR-2005605 |
|Job=2|Typ=P|Action=Information|M=3|
….
|Job=99|Typ=S|Action=Order|No=AF502033H|
|Job=99|Typ=P|Action=Information|M=1|

顺便说一句,我无法理解 JREPL。 我必须创建文件来纠正 |No= 和 | 之间的输入。 批处理(output.txt)之后的文件示例应该是这样的

|Job=1|Typ=S|Action=Order|No=5310422044000|
|Job=1|Typ=P|Action=Information|M=1|
|Job=2|Typ=S|Action=Order|No=2005605|
|Job=2|Typ=P|Action=Information|M=3|
….
|Job=99|Typ=S|Action=Order|No=502033|
|Job=99|Typ=P|Action=Information|M=1|

感谢您的帮助。

【问题讨论】:

  • 请发布一些您尝试过的方法的sn-ps,以便人们可以指导您找到解决方案。
  • 你应该先搜索一些关键词。 link1link2

标签: windows batch-file


【解决方案1】:
@ECHO OFF
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q36500938.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
 ECHO "%%a"|FIND "|No=" >nul
 IF ERRORLEVEL 1 (ECHO(%%a
 ) ELSE (
  SET "line=%%a"
  CALL :process
 )
)
)>"%outfile%"

GOTO :EOF

:process
SET "tail="
:procloop
SET "line=%line:~0,-1%"
SET "char=%line:~-1%"
IF "%char%"=="=" (
 FOR %%x IN ("%line%%tail%|") DO ECHO(%%~x
 GOTO :EOF 
)
IF "%char%" geq "0" IF "%char%" leq "9" SET "tail=%char%%tail%"
GOTO procloop

您需要更改sourcedirdestdir 的设置以适应您的情况。

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

生成定义为 %outfile% 的文件

虽然没有明确说明,但您似乎希望消除每行末尾|No=| 之间的所有非数字。

上面只是检测该行是否包含|No=,并假设如果出现,则在最后一个字段中。如果它没有出现,只需反刍该行。如果确实出现,请处理line 中的行。

该处理简单地去掉最后一个字符,然后确定新的最后一个字符是否为=。如果是,则假设它是No= 中的=,因此添加尾部并关闭| 并输出。通过将所需的字符串放在引号中,您可以使用for 将其分配给%%x,然后使用%%~x 删除封闭的引号 - 否则您会遇到难以解决的语法错误。

如果最后一个字符不是=,而是0..9,则累积它,否则忽略它并继续处理,直到检测到=

【讨论】:

  • 它在我的第一个文件上运行良好,谢谢@Magoo。难以置信,感谢您的快速答复!
【解决方案2】:

这是一个简单的JREPL.BAT 解决方案

call jrepl "\D" "" /p "(\|No=)([\c|]+)(\|)$" /prepl "$1+{$2}+$3" /f input.txt /o output.txt

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2012-04-27
    • 2017-03-17
    • 2014-12-08
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    相关资源
    最近更新 更多