Board logo

标题: [ 新手练习题 4 ]批处理读取文本但不显示注释内容 [打印本页]

作者: wxcute    时间: 2009-6-8 21:04     标题: [ 新手练习题 4 ]批处理读取文本但不显示注释内容

[ 新手练习题 4 ] 读取文本但不显示注释内容
有一文本文件,开头为分号“;”的整行内容为注释,还有双斜杠“//”及其后面的内容为注释。
要如何显示出注释的内容呢?即显示除注释以外的内容。

目的:学习多种字符串处理的方法。

要求:以示例文本为模板,也可自己构造文本。
   方法不限。


评分:代码可读性 1 分;
   首个新方法 7 分,第二个 5 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 2 分,已经出现过的方法追加 1 分;
   只处理一种注释分数减半。

示例文本
  1. ;这里是注释,只有开头是分号的才是注释,分号在其他位置不是哦!
  2. //这也是注释,一般放在正文后面,当然也可以放在开头。
  3. ;批处理之家新手练功区介绍
  4. 新手练功区为新手提供实战前的测试。
  5. 就像在游戏中打怪,
  6. 新手在这里升级,新手在这里成长。  //新手区宣言
复制代码

[ 本帖最后由 wxcute 于 2009-6-9 21:42 编辑 ]
作者: 随风    时间: 2009-6-8 21:11

还有双斜杠“//”及其后面的内容为注释。
...

// 在文本的什么位置呢?应该说明一下吧。
作者: wangshuping42    时间: 2009-6-8 23:12     标题: 不知道行不行,手机发帖没测试

  1. @echo off
  2. for /f "eol=;" %%i in (test.txt) do (
  3.    echo %%i >>temp.txt
  4.    )
  5. for /f "eol=//" %%j in (temp.txt) do (
  6.    echo %%j
  7. )
  8. del temp.txt
  9. pause>nul&exit
复制代码

[ 本帖最后由 wangshuping42 于 2009-6-8 23:20 编辑 ]
作者: keen    时间: 2009-6-9 10:51

a.txt
  1. 4981 5487 2724 2419 4837 2218 37 19 2880 5521
  2.                            ;9613 7292 7433 554 8287 1147 9516 5678 9760 3028
  3. 9220 5936 3580 6455 8116 9776 6246 1652 6390 6615
  4. 7855 7707 1850 4564 2454 4571 7330 8718 4499 5083
  5. 7683 3076 637 3644 9714 6080 9554 8250 5353 6692
  6. 4036 9590 4539 8156 7648 6738 8834 7033 4043 9729
  7. //7512 1299 1611 1054 9291 9948 7213 5882 6891 6149
  8. 1159 7604 1290 7426 8342 4907 7802 2285 6828 4547
  9.              //940 4594 5470 3831 7949 3308 8553 5841 4532 6151
  10. ;2048 4362 7137 6227 1843 2833 119 6124 6716 4435
  11. 6342 132 4637 4359 7482 632 8 35 9999 1023
复制代码
代码:
  1. @echo off
  2. for /f "delims=" %%i in ('findstr /n .* a.txt') do (
  3.     set str=%%i
  4.     setlocal enabledelayedexpansion
  5.     set str=!str:*:=!
  6.     set str=!str:*//=;!
  7.     set str=!str:*;=;!
  8.     for /f "delims=" %%a in ("!str!") do echo %%a
  9.     endlocal
  10. )
  11. pause
复制代码

作者: wxcute    时间: 2009-6-9 21:43     标题: 回复 2楼 的帖子

感谢指正,已在示例文本中添加说明。
作者: rwxyxy    时间: 2009-6-10 12:53

处理了一下开头有空格的行及空白行
测试文本test.txt如下:
  1. asdfas dflasdf
  2.   ;asdlfkjlk
  3.   //alsdkflk
  4. ;hfajksdfhk
  5. //kljhadsf
  6.    
  7. poipoi //asdf
  8. asdfasdf; //asdf
  9. klhjasdf; asdf
复制代码
代码:
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in (test.txt) do ( if not "%%a"==""  echo %%a >> _tmp.txt )
  3. for /f "usebackq delims=" %%i in (`findstr /V "^; ^//" _tmp.txt`) do (
  4.     set str=%%i
  5.     set str=!str://=@!
  6.     for /f "delims=@" %%j in ("!str!") do echo %%j
  7. )
  8. del _tmp.txt
  9. pause>nul
复制代码

作者: 风行者    时间: 2009-7-13 02:31

  1. @echo off
  2. for /f "tokens=1* delims=//" %%a in ('type a.txt ^|findstr /v /b /c:"//"') do echo %%a
  3. pause >nul
复制代码

作者: nopr    时间: 2009-8-6 21:19

  1. @echo off
  2. for /f "eol=/  delims=/ tokens=1" %%i in (tset.txt) do echo %%i>>b.txt
  3. for /f %%j in (b.txt) do echo %%j
  4. del b.txt&pause
复制代码
自己感觉不好,应该再简化一下。
作者: Lumiere    时间: 2009-8-7 00:11

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f  "eol=; delims=" %%a in (sample.txt) do (
  3.       set "x=%%a"&set b=!x:*//=!
  4.       if defined b (call set var=%%x://!b!=%%) else set var=!x!
  5.       if defined var echo !var!>>resolution.txt
  6. )
  7. pause
复制代码

[ 本帖最后由 Lumiere 于 2009-8-7 00:45 编辑 ]
作者: DXSX    时间: 2009-8-26 09:01

先把";"  开头的行剔除并把其他行开头添加 “// ”,再用FOR 显示 //  割断的第一部分。

@ECHO OFF
IF EXIST TEMP.TXT DEL TEMP.TXT
FOR /F "EOL=; DELIMS=" %%C IN ('type TEST.TXT') DO (
  SET "X=%%C"
  SETLOCAL ENABLEDELAYEDEXPANSION
  ECHO // !X!>>TEMP.TXT
  ENDLOCAL
)
FOR /F "TOKENS=1 DELIMS=//" %%D IN ('TYPE TEMP.TXT') DO (
  IF NOT "%%D"==" " ECHO %%D
)
DEL TEMP.TXT
PAUSE




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