标题: 【练习-027】批处理将已知字符串按要求输出 [打印本页]
作者: batman 时间: 2008-10-18 12:16 标题: 【练习-027】批处理将已知字符串按要求输出
出题目的:
让大家了解特殊输出的方法,提高学习兴趣
加分规则:
1、完美代码加分15分
2、其中思路独特基分5分
3、其中代码高效基分4分
4、其中代码简洁基分3分
5、其中代码通用基分2分
6、其中无临时文件基分1分
相关要求:
请管理员、版主、巡查级别的会员暂且在跟贴时只提出指导性意见,不要解题,将思考
的余地留给大家
题目内容:
有a.txt,内容如下:
将进酒—李白
君不见,黄河之水天上来,奔流到海不复回。
君不见,高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,杯莫停。
与君歌一曲,请君为我侧耳听:
钟鼓馔玉不足贵,但愿长醉不复醒。
古来圣贤皆寂寞,唯有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,
与尔同销万古愁。
要求用批处理对a.txt内容进行输出:
1、逐字延时输出:一个字一个字地输出,字数是越来越多,输出后原文格式不变
2、逐字向左滚动:一个字一个字地输出,但字符串是持续向左滚动,新字符从右端出现
老字符在左端消失
3、逐行显示消失:一行一行地显示字符,每行字符在屏幕暂停一段时间然后消失,同时
下一行字符显示出来
4、逐行彩色输出:逐行输出且每行字符的颜色不同(挑战题)
[ 本帖最后由 batman 于 2008-10-18 17:40 编辑 ]
作者: yslyxqysl 时间: 2008-10-18 13:57
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%a in (a.txt) do set a=%%a&set tp=0&call :a
pause>nul
for /F "delims=" %%b in (a.txt) do set b=%%b!b!
set tp=0&call :b
set tp=1
pause>nul
for /F "delims=" %%c in (a.txt) do (
echo %%c&ping -n 2 127.11>nul
cls&for /l %%y in (1 1 !tp!) do echo.
set /a tp+=1
)
set str=123456789abcdef
for /F "delims=" %%d in (a.txt) do (
set /a tp=!random!%%16
call echox -c %%str:~!tp!,1%% "%%d"
rem set /p = <nul>%%d
rem call findstr /a:%%str:~!tp!,1%% %%d
)
pause>nul&exit
:a
if not "!a:~%tp%,1!"=="" (
set /p " =!a:~%tp%,1!"<nul
set /a tp+=1&ping -n 1 127.11>nul&goto a
)
echo.&goto :eof
:b
if not "!b:~%tp%,1!"=="" (
echo !b:~%tp%,10!&set /a tp+=1
for %%z in (a a a) do ping -n 1 127.11>nul
cls&goto b
)
goto :eof
[ 本帖最后由 yslyxqysl 于 2008-10-18 14:39 编辑 ]
作者: batman 时间: 2008-10-18 14:33
楼上兄弟答得好快,但好像还用到了echox第三方工具,在这里补充下请昼不要使用第三方
工具来解题。。。
作者: yslyxqysl 时间: 2008-10-18 14:35
文件中有个>字符你叫我怎么办?
作者: shqf 时间: 2008-10-18 16:10
- @echo off&setlocal EnableDelayedExpansion
- mode con cols=46 lines=18
- cls&color 0a
- for %%i in (逐字延时输出 逐字向左滚动 逐行显示消失 逐行彩色输出) do (
- cls&echo %%i
- for /l %%n in (1 1 3000) do (echo.>nul)
- cls
- for /f "delims=" %%a in (a.txt) do (
- set str=!str!%%a
- if "%%i"=="逐字延时输出" (
- for /l %%b in (0 1 24) do (
- set /p =!str:~%%b,1!<nul
- if not "!str:~%%b,1!"==" " (for /l %%n in (1 1 800) do (echo.>nul))
- )
- echo.
- set str=
- )
- if "%%i"=="逐行显示消失" (
- cls&echo !str!
- for /l %%n in (1 1 3500) do (echo.>nul)
- set str=
- )
- if "%%i"=="逐行彩色输出" (
- call :cssc !str!
- set str=
- )
- )
- if "%%i"=="逐字向左滚动" (
- for /l %%b in (0 1 230) do (
- cls&set sstr=!str:~%%b,23!
- if not "!sstr!"=="" echo !sstr!
- for /l %%n in (1 1 800) do (echo.>nul)
- )
- set str=
- )
- )
- echo 按任意键结束...&pause>nul
- exit
-
- :cssc
- >%1,set/p=<nul
- set co=123456789abcdef
- set /a co1=%random%%%16
- set /a co2=%random%%%16
- findstr /a:!co:~%co1%,1!!co:~%co2%,1! .* "%~1*"
- set /p= <nul
- echo.
- del "%~1"
- goto :eof
复制代码
(原a.txt文件中“岑夫子”后为半角逗号,要改为全角逗号)。字符显示是快了点吗?已调为800。
[ 本帖最后由 shqf 于 2008-10-18 19:27 编辑 ]
作者: keen 时间: 2009-5-24 00:30 标题: 回复 5楼 的帖子
不明白,整个彩色输出的代码。
能给解释一下吗?
作者: Batcher 时间: 2009-5-24 01:10 标题: 回复 6楼 的帖子
批处理显示彩色字符的原理及其中退格符的作用
http://bbs.bathome.net/viewthread.php?tid=1331#pid11864
作者: keen 时间: 2009-5-24 14:51
回复7楼,多谢BATCHER,已经明白代码的含义。
回复5楼,在随机数当中,应该,改成set /a co1=%random%%%15,而不应该是16,如果是16,就会有无法找到findstr /a的参数的错误情况!
[ 本帖最后由 keen 于 2009-5-24 14:52 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |