Board logo

标题: [文本处理] 用BAT能不能处理这样格式的文本内容? [打印本页]

作者: wh123wh123    时间: 2023-9-6 21:58     标题: 用BAT能不能处理这样格式的文本内容?

原A.txt内容格式如下:

-------------第几情况-----------------------------
1--基础姓名
2--性别
3--年龄
4--职业
-------------情况说明----------------------------
5.--考分28
6.--面试
7.--不合格


要求通过批处理处理后效果如下并输出到B.txt里:

{-------------第几情况-----------------------------}
基础姓名:GTIOU(1,0,0);
性别:GTIOU(2,0,0);
年龄:GTIOU(3,0,0);
职业:GTIOU(4,0,0);
{-------------情况说明----------------------------}
考分28:GTIOU(5,0,0);
面试:GTIOU(6,0,0);
不合格:GTIOU(7,0,0);

也就是在每行的后面追加“:GTIOU(这里是每行最前面的数值,0,0);”把每行最前面的数字移动到括号里......以此类推
,希望老师用BAT写一个这个的功能的代码吧,谢谢了
作者: 77七    时间: 2023-9-6 23:11

  1. @echo off
  2. set "file=1.txt"
  3. set a=(
  4. set b=)
  5. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do (
  6. set str=%%b
  7. setlocal enabledelayedexpansion
  8. if "!str!" equ "" (
  9. echo=
  10. ) else if "!str:~0,3!" equ "---" (
  11. echo {!str!}
  12. ) else (
  13. echo !str!|findstr "^[0-9]" 1>nul && (
  14. for /f "tokens=1* delims=.-" %%c in ("!str!") do (
  15. echo %%d:GTIOU!a!%%c,0,0!b!;
  16. )
  17. ) || echo !str!
  18. )
  19. endlocal
  20. ))>2.txt
  21. pause
复制代码

作者: hlzj88    时间: 2023-9-6 23:37

  1. @echo off
  2. for /f "delims=" %%i in (a.txt) do echo %%i|findstr /i "情况"&&echo {%%i}>>b.txt || for /f "tokens=1,2 delims=.-" %%k in ('echo %%i') do echo %%l:GTIOU^(%%k,0,0^);>>b.txt
复制代码
仅以顶楼示例做了测试。
作者: pd1    时间: 2023-9-7 00:05

  1. powershell -c "gc .\A.txt|%{if($_[0] -eq '-'){'{'+$_+'}'}else{$_.substring($_.LastIndexOf('-')+1)+':GTIOU('+$_[0]+',0,0);'}}>B.txt"
复制代码

作者: Five66    时间: 2023-9-7 06:19

本帖最后由 Five66 于 2023-9-7 06:30 编辑
  1. @set @theCopyLeft=0;/* 0& echo off
  2. set "inflie=aaa.txt"
  3. set "outfile=bbb.txt"
  4. set "add=:GTIOU(数字,0,0);"
  5. type  "%inflie%" | cscript //nologo //e:jscript "%~f0" "%add%" >"%outfile%"
  6. echo done&pause&exit/b
  7. rem */
  8. var a,b=WScript.Arguments.Length?WScript.Arguments(0):":GTIOU(数字,0,0);";
  9. while (!WScript.StdIn.AtEndOfStream) {
  10. f = WScript.StdIn.ReadLine();
  11. if(!f){WScript.Echo(f);continue;}
  12. a=f.replace(/^(\d)+[.-]+/,'');
  13. if(f.substr(0,4)=="----")WScript.Echo('{'+f+'}');
  14. else if(RegExp.$1 && RegExp.$1 !='nil' && a)WScript.Echo(a+b.replace("数字",RegExp.$1));
  15. else WScript.Echo(f);
  16. "nil".replace(/(nil)/,"");
  17. }
复制代码

作者: Nsqs    时间: 2023-9-7 07:03

  1. powershell -noprofile -executionpolicy bypass "gc a.txt|%%{if($_ -match '^-'){\"{$_}\"}else{$r=[regex]::Matches($_,'(\d+)\.?--(\D+)').groups;\"$($r[2]):GTIOU($($r[1]),0,0);\"}}" >b.txt
复制代码

作者: qixiaobin0715    时间: 2023-9-7 08:31

本帖最后由 qixiaobin0715 于 2023-9-7 08:39 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=*" %%i in (a.txt) do (
  4.     set "n=%%i"
  5.     set /a "n=n"
  6.     if !n! equ 0 (
  7.         echo,%%i
  8.     ) else (
  9.         for /f "tokens=1* delims=.-" %%j in ("%%i") do (
  10.             echo,%%k:GTIOU(%%j,0,0^);
  11.         )
  12.     )
  13. ))>b.txt
  14. pause
复制代码

作者: hfxiang    时间: 2023-9-7 12:51

回复 1# wh123wh123
也可以试一下gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe
  1. gawk -F"\\.?-- " "{if(/^-{8,}.+-{8,}$/){print\"{\" $0 \"}\"}else{print $2\":GTIOU (\" $1 \",0,0);\"}}" a.txt>b.txt
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2