标题: 【练习-072】批处理按要求原样输出特殊字符文本内容 [打印本页]
作者: batman 时间: 2013-2-2 22:03 标题: 【练习-072】批处理按要求原样输出特殊字符文本内容
本帖最后由 batman 于 2013-2-2 22:19 编辑
出题目的:
1、重温特殊字符输出处理方法;
2、重温空行输出处理方法;
3、学习局部变量传递方法。
加分原则:
满分30分,视代码和思路酌情加分,以思路为重。
题目如下:
有特殊字符文本a.txt,要求输出a.txt第8个含有&字符行前面所有行的内容,当然也包括空行。
在这里请注意这个8并不是指的文本的自然行,而是每当行中含有&字符计数加1,当计数达到8时
前面所有的行(含本行),之后的行就不要输出了(本题应输出并只输出到第19行)。总之,题目
说难不难,说易不易,大家都来晒晒自己的思路和技巧吧。
a.txt- }_){*|%<:\!`~"_.} =!>[."~|#+|
- -|*#_[{\ ["",*@ >'+{+,\{[[:-`]
-
- ;&'^;`|[^ @,{=?@;.}[-.:,.!|<#
- :@"->\;#,%}%* (}"')('&-]=.`|{(
- `>?||>[.'!_$`\#<+) <~<#>_&~\$`
- !-~:@)/@][|>\~:}^/}.^!)=>-\,{^
-
- $$*$*$^,]~".&#?_#;'(?)^>@\].{^
-
- -~^/<_$}_/$.}_-(=]/})+%-"-^\]>
- [<^._@|_?.";}[$'#]>");/-;!{#".
- :,'_(}`@~-\]`)-> ]-.(;\'^]++,+
- =+'/}]"`* #_ {[[;&{{)$|](,<]~/
- .;@/<-^[*#=+~&%/;"=${|}?`.`_#/
-
- =>>[@^]{.{<#>*`}]]([)/|]_#_/$/
- ),\<.-<?"<\.))\',`@&&\+'+?`>}&
- (%?<*{:\@/>;/=\`:|(}""~;`|[&?!
- !^.}'~:[{(][\<'"=-^+#.*"/$(:&&
- :^'`.{,"?@"~|(_`:(+<</({=+~-{|
- ]!,|("|@[<#&^?;&](^~}%{!^),>./
- !-~'- #}@(\>{#(,~*]=.`%_$@(`-*
- (?~/]~#_#'-#\?![<?<.$][ @:?\?
复制代码
作者: tmplinshi 时间: 2013-2-2 22:25
本帖最后由 tmplinshi 于 2013-2-2 22:54 编辑
- @echo off
- setlocal
-
- for /f "delims=" %%a in (' findstr /n .* a.txt ') do (
- set str=%%a
- setlocal enabledelayedexpansion
- echo,!str:*:=!
-
- if "!str:&=!" neq "!str!" (
- endlocal
- set /a "count += 1, 1 / (count - 8)" 2>nul || goto finish
- ) else (
- endlocal
- )
- )
-
- :finish
- echo 完成
- pause
复制代码
作者: terse 时间: 2013-2-3 13:38
本帖最后由 terse 于 2013-2-3 14:48 编辑
去掉FOR
搞来搞去 和版主一样 早知道不贴了- @echo off
- set num=1
- for /f "delims=" %%i in (' findstr /n .* a.txt ') do (
- set str=%%i
- setlocal enabledelayedexpansion
- if !num! leq 8 echo;!str:*:=!
- if "!str:&=!" neq "!str!" (
- endlocal&set /a num+=1
- ) else endlocal
- )
- pause
复制代码
作者: tmplinshi 时间: 2013-2-4 12:31
- @echo off
- setlocal enabledelayedexpansion
- set count=0
-
- (
- for /f %%a in (' findstr /n .* a.txt ') do (
- set str=
- set /p str=
- echo,!str!
-
- set str=#!str!
- if "!str:&=!" neq "!str!" (
- set /a "count += 1, 1 / (count - 8)" 2>nul || goto finish
- )
- )
- ) <a.txt
-
- :finish
- echo 完成
- pause
复制代码
作者: iBat 时间: 2013-2-5 13:21
真是妙啊,用findstr /n 解决了输出空行的问题,利用零不能为除数判断输出完成。只是小弟有一处不解,为什么要分别endlocal,恳请版主解惑。先谢过啦!
作者: CrLf 时间: 2013-2-5 15:15
- @echo off&setlocal enabledelayedexpansion
- for /f %%a in ('find /c /v ""^<a.txt') do (
- for /l %%b in (1 1 %%a) do (
- set str=&set /p str=
- if !n! lss 8 echo;!str!
- if defined str if !str:^&^=! neq !str! set /a n+=1
- )
- )<a.txt
- pause
复制代码
再来个恶心的:- @echo off
- for /f "tokens=1,2 delims=:" %%a in ('findstr /n "&" a.txt^|findstr /n .') do (
- echo %%a|find "8">nul&&for /f %%a in ('find /c /v ""^<a.txt') do set /a n=%%a-%%b
- )
- set n|findstr "^n=">nul 2>&1&&sort /+128 a.txt|more +%n%|sort /+128
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |