[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何实现文本内查找?

原文本内容:
ID1   A  B  C  D  E  F  G  H  I  G  K......
ID2   A  C  M  E
ID3   N  T   Y  E
空行
ID4   A  B  C  D  E  F  G  H  I  G  K......
ID5   C  M  E  Y
ID6   T   Y  E  G
空行
........

处理结果:文本中的空行把文本分成很多个板块,在每个独立的板块中第一行是目标行,后面每行中的字段在第一行中查找,若找到了则在该字段后面加“1”,没找到在该字段后面加“0”
上面的结果最终处理结果为:
ID1   A  B  C  D  E  F  G  H  I  G  K
ID2   A 1  C 1  M 0  E 1
ID3   N 0  T 0  Y 0 E 1
空行
ID4   A  B  C  D  E  F  G  H  I  G  K
ID5   C 1  M 0 E 1 Y 0
ID6   T  0  Y 0 E 1 G 0
空行
谢谢了
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 tmplinshi 于 2012-12-4 09:56 编辑

好长。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 设置文件名
  4. set File="a.txt"
  5. REM 统计文本行数
  6. for /f %%a in ('find /c /v "" ^< %file%') do set #=%%a
  7. REM 将第一行每一列的字符设为变量
  8. set /p Line1=<%file%
  9. for %%a in (%Line1:* =%) do set ~%%a=1
  10. REM --------------------------------------------------
  11. set _Start=
  12. (
  13.     for /l %%a in (1 1 %#%) do (
  14.         set OldStr=
  15.         set NewStr=
  16.         set /p OldStr=
  17.         
  18.         if not defined _Start (
  19.         
  20.             set NewStr=!OldStr!
  21.             set _Start=1
  22.             
  23.         ) else (
  24.         
  25.             if defined OldStr (
  26.                 for %%a in (!OldStr!) do (
  27.                     if not defined NewStr (
  28.                         set NewStr=%%a
  29.                     ) else (
  30.                         if defined ~%%a (
  31.                             set NewStr=!NewStr! %%a 1
  32.                         ) else (
  33.                             set NewStr=!NewStr! %%a 0
  34.                         )
  35.                     )
  36.                 )
  37.             ) else (
  38.                 set _Start=
  39.             )
  40.         )
  41.         
  42.         echo,!NewStr!
  43.     )
  44. ) <%file% >Result.txt
复制代码
1

评分人数

TOP

RE: 【已解决】文本内查找

回复 2# tmplinshi


    已解决,十分感谢!

TOP

回复 2# tmplinshi


    不好意思,还需要打扰您。昨天试了代码,但没仔细验证结果,现在发现还有点问题。
   
    我需要在每个以空行分割的块的第一行查找,每个空格后的第一行内容都不相同。您给的代码是整个文本的第一行为所有目标的查找行,我前面没有描述清楚,给您添麻烦了。

TOP

回复  tmplinshi


    不好意思,还需要打扰您。昨天试了代码,但没仔细验证结果,现在发现还有点问题。 ...
sweet惜缘 发表于 2012-12-5 09:00
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 设置文件名
  4. set File="a.txt"
  5. REM 统计文本行数
  6. for /f %%a in ('find /c /v "" ^< %file%') do set #=%%a
  7. REM --------------------------------------------------
  8. set _Start=
  9. (
  10.     for /l %%a in (1 1 %#%) do (
  11.         set OldStr=
  12.         set NewStr=
  13.         set /p OldStr=
  14.         
  15.         if not defined _Start (
  16.         
  17.             set NewStr=!OldStr!
  18.             set _Start=1
  19.             
  20.             setlocal
  21.             for %%a in (!OldStr:* ^=!) do set ~%%a=1
  22.             
  23.         ) else (
  24.         
  25.             if defined OldStr (
  26.                 for %%a in (!OldStr!) do (
  27.                     if not defined NewStr (
  28.                         set NewStr=%%a
  29.                     ) else (
  30.                         if defined ~%%a (
  31.                             set NewStr=!NewStr! %%a 1
  32.                         ) else (
  33.                             set NewStr=!NewStr! %%a 0
  34.                         )
  35.                     )
  36.                 )
  37.             ) else (
  38.                 endlocal
  39.                 set NewStr=
  40.                 set _Start=
  41.             )
  42.         )
  43.         
  44.         echo,!NewStr!
  45.     )
  46. ) <%file% >Result.txt
复制代码

TOP

返回列表