Board logo

标题: 【练习-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

  1. @echo off&setlocal EnableDelayedExpansion
  2. mode con cols=46 lines=18
  3. cls&color 0a
  4. for %%i in (逐字延时输出  逐字向左滚动  逐行显示消失  逐行彩色输出) do (
  5.   cls&echo                   %%i
  6.   for /l %%n in (1 1 3000) do (echo.>nul)
  7.   cls
  8.   for /f "delims=" %%a in (a.txt) do (
  9.     set str=!str!%%a
  10.     if "%%i"=="逐字延时输出" (
  11.         for /l %%b in (0 1 24) do (
  12.         set /p =!str:~%%b,1!<nul
  13.         if not "!str:~%%b,1!"==" " (for /l %%n in (1 1 800) do (echo.>nul))
  14.         )
  15.         echo.
  16.         set str=
  17.     )
  18.     if "%%i"=="逐行显示消失" (
  19.         cls&echo !str!
  20.         for /l %%n in (1 1 3500) do (echo.>nul)
  21.         set str=
  22.     )
  23.     if "%%i"=="逐行彩色输出" (
  24.         call :cssc !str!
  25.         set str=
  26.     )
  27.   )
  28.   if "%%i"=="逐字向左滚动" (
  29.         for /l %%b in (0 1 230) do (
  30.         cls&set sstr=!str:~%%b,23!
  31.         if not "!sstr!"=="" echo !sstr!
  32.         for /l %%n in (1 1 800) do (echo.>nul)
  33.           )
  34.         set str=
  35.   )
  36. )
  37. echo 按任意键结束...&pause>nul
  38. exit
  39. :cssc
  40. >%1,set/p=<nul
  41. set co=123456789abcdef
  42. set /a co1=%random%%%16
  43. set /a co2=%random%%%16
  44. findstr /a:!co:~%co1%,1!!co:~%co2%,1! .* "%~1*"
  45. set /p= <nul
  46. echo.
  47. del "%~1"
  48. 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://bathome.net./) Powered by Discuz! 7.2