找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23490|回复: 4

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

[复制链接]
发表于 2012-12-3 21:47:17 | 显示全部楼层 |阅读模式
原文本内容:
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
空行
谢谢了

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-12-4 09:39:02 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-12-4 12:24:57 | 显示全部楼层

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

回复 2# tmplinshi


    已解决,十分感谢!
 楼主| 发表于 2012-12-5 09:00:56 | 显示全部楼层
回复 2# tmplinshi


    不好意思,还需要打扰您。昨天试了代码,但没仔细验证结果,现在发现还有点问题。
   
    我需要在每个以空行分割的块的第一行查找,每个空格后的第一行内容都不相同。您给的代码是整个文本的第一行为所有目标的查找行,我前面没有描述清楚,给您添麻烦了。
发表于 2012-12-6 09:17:26 | 显示全部楼层
回复  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 19:21 , Processed in 0.019018 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表