返回列表 发帖

【练习-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 编辑 ]
***共同提高***

回复7楼,多谢BATCHER,已经明白代码的含义。

回复5楼,在随机数当中,应该,改成set /a co1=%random%%%15,而不应该是16,如果是16,就会有无法找到findstr /a的参数的错误情况!

[ 本帖最后由 keen 于 2009-5-24 14:52 编辑 ]
(*^_^*)

TOP

回复 6楼 的帖子

批处理显示彩色字符的原理及其中退格符的作用
http://bbs.bathome.net/viewthread.php?tid=1331#pid11864
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

不明白,整个彩色输出的代码。
能给解释一下吗?
(*^_^*)

TOP

@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 :eofCOPY
(原a.txt文件中“岑夫子”后为半角逗号,要改为全角逗号)。字符显示是快了点吗?已调为800。

[ 本帖最后由 shqf 于 2008-10-18 19:27 编辑 ]
2

评分人数

    • 随风:PB + 11 技术 + 1
    • batman: 精彩!逐字的速度可调整一下PB + 15 技术 + 1

TOP

文件中有个>字符你叫我怎么办?

TOP

楼上兄弟答得好快,但好像还用到了echox第三方工具,在这里补充下请昼不要使用第三方
工具来解题。。。
***共同提高***

TOP

@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 编辑 ]
1

评分人数

TOP

返回列表