标题: [ 新手练习题 4 ]批处理读取文本但不显示注释内容 [打印本页]
作者: wxcute 时间: 2009-6-8 21:04 标题: [ 新手练习题 4 ]批处理读取文本但不显示注释内容
[ 新手练习题 4 ] 读取文本但不显示注释内容
有一文本文件,开头为分号“;”的整行内容为注释,还有双斜杠“//”及其后面的内容为注释。
要如何显示出非注释的内容呢?即显示除注释以外的内容。
目的:学习多种字符串处理的方法。
要求:以示例文本为模板,也可自己构造文本。
方法不限。
评分:代码可读性 1 分;
首个新方法 7 分,第二个 5 分,依次类推,最少 2 分;
一人可多种方法,新方法追加 2 分,已经出现过的方法追加 1 分;
只处理一种注释分数减半。
示例文本- ;这里是注释,只有开头是分号的才是注释,分号在其他位置不是哦!
- //这也是注释,一般放在正文后面,当然也可以放在开头。
- ;批处理之家新手练功区介绍
- 新手练功区为新手提供实战前的测试。
- 就像在游戏中打怪,
- 新手在这里升级,新手在这里成长。 //新手区宣言
复制代码
[ 本帖最后由 wxcute 于 2009-6-9 21:42 编辑 ]
作者: 随风 时间: 2009-6-8 21:11
// 在文本的什么位置呢?应该说明一下吧。
作者: wangshuping42 时间: 2009-6-8 23:12 标题: 不知道行不行,手机发帖没测试
- @echo off
- for /f "eol=;" %%i in (test.txt) do (
- echo %%i >>temp.txt
- )
- for /f "eol=//" %%j in (temp.txt) do (
- echo %%j
- )
- del temp.txt
- pause>nul&exit
复制代码
[ 本帖最后由 wangshuping42 于 2009-6-8 23:20 编辑 ]
作者: keen 时间: 2009-6-9 10:51
a.txt- 4981 5487 2724 2419 4837 2218 37 19 2880 5521
- ;9613 7292 7433 554 8287 1147 9516 5678 9760 3028
- 9220 5936 3580 6455 8116 9776 6246 1652 6390 6615
- 7855 7707 1850 4564 2454 4571 7330 8718 4499 5083
- 7683 3076 637 3644 9714 6080 9554 8250 5353 6692
- 4036 9590 4539 8156 7648 6738 8834 7033 4043 9729
- //7512 1299 1611 1054 9291 9948 7213 5882 6891 6149
- 1159 7604 1290 7426 8342 4907 7802 2285 6828 4547
- //940 4594 5470 3831 7949 3308 8553 5841 4532 6151
- ;2048 4362 7137 6227 1843 2833 119 6124 6716 4435
- 6342 132 4637 4359 7482 632 8 35 9999 1023
复制代码
代码:- @echo off
- for /f "delims=" %%i in ('findstr /n .* a.txt') do (
- set str=%%i
- setlocal enabledelayedexpansion
- set str=!str:*:=!
- set str=!str:*//=;!
- set str=!str:*;=;!
- for /f "delims=" %%a in ("!str!") do echo %%a
- endlocal
- )
- pause
复制代码
作者: wxcute 时间: 2009-6-9 21:43 标题: 回复 2楼 的帖子
感谢指正,已在示例文本中添加说明。
作者: rwxyxy 时间: 2009-6-10 12:53
处理了一下开头有空格的行及空白行
测试文本test.txt如下:- asdfas dflasdf
- ;asdlfkjlk
- //alsdkflk
- ;hfajksdfhk
- //kljhadsf
-
- poipoi //asdf
- asdfasdf; //asdf
- klhjasdf; asdf
复制代码
代码:- @echo off & setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in (test.txt) do ( if not "%%a"=="" echo %%a >> _tmp.txt )
- for /f "usebackq delims=" %%i in (`findstr /V "^; ^//" _tmp.txt`) do (
- set str=%%i
- set str=!str://=@!
- for /f "delims=@" %%j in ("!str!") do echo %%j
- )
- del _tmp.txt
- pause>nul
复制代码
作者: 风行者 时间: 2009-7-13 02:31
- @echo off
- for /f "tokens=1* delims=//" %%a in ('type a.txt ^|findstr /v /b /c:"//"') do echo %%a
- pause >nul
复制代码
作者: nopr 时间: 2009-8-6 21:19
- @echo off
- for /f "eol=/ delims=/ tokens=1" %%i in (tset.txt) do echo %%i>>b.txt
- for /f %%j in (b.txt) do echo %%j
- del b.txt&pause
复制代码
自己感觉不好,应该再简化一下。
作者: Lumiere 时间: 2009-8-7 00:11
- @echo off&setlocal enabledelayedexpansion
- for /f "eol=; delims=" %%a in (sample.txt) do (
- set "x=%%a"&set b=!x:*//=!
- if defined b (call set var=%%x://!b!=%%) else set var=!x!
- if defined var echo !var!>>resolution.txt
- )
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |