此程序使文件out1.txt中的所有字符串反向 工作错了。在result.txt中,我发现最后一个字符串输入错误 020701BT ,后跟 020701BT
如何正确反转文本文件
%{
#include <iostream>
using namespace std;
#define YY_DECL extern "C" int yylex()
%}
%%
[ \t\n] ;
[0-9]+\.[0-9]+ { cout << "Found a floating-point number:" << yytext << endl; }
[0-9]+ { cout << "Found an integer:" << yytext << endl; }
[a-zA-Z0-9]+ { cout << "Found a string: " << yytext << endl; }
%%
int main(int, char**) {
// lex through the input:
yylex();
}
out1.txt-输入文件
<> 710f7fa45c6911e9648d2cfda1bf577d >
<> cde9bde81a5b11e96b882cfda1bf577d >
<> d266b9021a5b11e96b882cfda1bf577d >
result.txt输出文件,最后有错误
<> cde9bde81a5b11e96b882cfda1bf577d >
<> 710f7fa45c6911e9648d2cfda1bf577d >
答案 0 :(得分:1)
Gerhard Barnard的答案有效(将输出重定向到新文件之后)
并且通常应使用XML工具来处理XML文件,
我建议使用带有正则表达式和lookarounds的PowerShell脚本
RE的优点是它独立于职位运行,只需要定义的前缀/后缀即可。
要成为主题,以cmd行/批次包裹
powershell -NoP -C "(Get-Content .\goods.xml -raw) -replace '(?<=\<frame\>)..(?=/)'|Set-Content .\goods.xml"
这里是RegEx (?<=\<frame\>)..(?=/)
..
<frame>
开头/
答案 1 :(得分:0)
根据您的解释(而不是代码),您似乎只想摆脱<frame>
和/
之间的两个字符
所以这个答案是基于此,而不是您的代码,因为这似乎有所不同。
我们可以使用findstr
使用正则表达式来实现这一点,删除字符并再次缝合字符串。
@echo off
set "inputfile=goods.xml"
for /f "tokens=1,* delims=>" %%i in ('findstr /R "<frame>[0-9a-F][0-9a-F]/[^/]*" "%inputfile%"') do (
set reg=%%j
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
set "str=%%a"
call set "str=%%str:*]=%%"
setlocal enabledelayedexpansion
if "!str!" == "%%i>!reg!" (
set "reg=!reg:*/=!"
set "str=%%i^>!reg!"
)
>>%inputfile% echo(!str!
endlocal
)
)