Board logo

标题: 【练习】批处理生成指定格式的文本 [打印本页]

作者: 随风    时间: 2008-4-29 00:34     标题: 【练习】批处理生成指定格式的文本

出个题目给大家作作。
要求:不产生临时文件,输出如下格式的文本。最好还能讲究下效率。
随机取得a或b,不一定要如样本,主要是格式符合要求。a和b的总数为60个

随机取得一个字母a或b 写入文本的第一行第一列
再次随机取得一个字母a或b 判断若与上次获得的字母相同则写到上次字母的正下方否则另起一列(即:写到第一行的第二列)以此类推。。。
最终要求字母总数为60个,格式如样本。


样本:
  1. ababababababababa
  2. aba a aba ab b b
  3. a a   ab  a  b
  4.   a   ab     b
  5.       a
  6.   
复制代码

[ 本帖最后由 随风 于 2009-5-10 17:10 编辑 ]
作者: youxi01    时间: 2008-4-29 00:41

你的格式是指什么?
是空格数目吗?(就是要求大致的样子要象楼上的?)
作者: 随风    时间: 2008-4-29 00:43     标题: 回复 2楼 的帖子

对,就是纵向都是同一个字母,
作者: youxi01    时间: 2008-4-29 11:42

呵呵,随风兄的帖子很容易让人钻空子哦?!

几个简单的set(将随机位置的字符替换为空即可)就可能搞定了哦?
作者: 随风    时间: 2008-4-29 12:00

随机替换空格,应该出不了上面的格式吧?
你是说先生成一个由纵列a、b组成的方块,再随机替换某些位置为空格?
作者: youxi01    时间: 2008-4-29 12:36

就拿第一行内容 为蓝本,然后
后面行的内容用上一行的内容,用空格随机替换后的结果为内容,肯定会如题目所要求的
作者: 随风    时间: 2008-4-29 13:07

难道不会出现这样的格式?
排不出了,o代表空格。
:
  1. ababababab
  2. obooab
  3. aoaoooa
  4. ooooob
复制代码

[ 本帖最后由 随风 于 2008-4-29 13:11 编辑 ]
作者: youxi01    时间: 2008-4-29 13:19

不会
下一行的内容,是在上一行的内容的基础上,通过替换得到的拉
作者: 随风    时间: 2008-4-29 13:41

果然,是我想偏了,那就简单了,移到新手练功区算了。。
作者: 随风    时间: 2008-4-30 07:47

又想了下,觉得仍不会如youxi所说那么简单,youxi直接给出代码如何?
作者: wxcute    时间: 2009-5-10 18:56

  1. @goto :begin
  2. 下面的要求可以出一新题了。
  3. 一、随机取两个字母组成交替字符串,中间不能有空格,一行字母数不定;
  4. 二、第二行以第一行为基础,随机替换几个字母为空格,依此类推;
  5. 三、字母总数为60。
  6. :begin
  7. @echo off
  8. setlocal enabledelayedexpansion
  9. setlocal
  10. set str=ab
  11. for /l %%s in (1 1 60) do set "SP= !sp!"
  12. :lp
  13. set/a n=%random%%%2,num+=1,L+=1
  14. set var=!str:~%n%,1!
  15. if not "%var_old%"=="%var%" set/a L=1,C+=1
  16. if #!L! gtr #!LMAX! set/aLMAX=L
  17. set/a C2=C-1
  18. if defined line%L% (
  19.  set "line_f=!line%L%:~,%C2%!"
  20. )else (
  21.  if %C2% equ 0 (set line_f=)else set line_f=!SP:~,%C2%!
  22. )
  23. set "line%L%=%line_f%%var%%SP%"
  24. set var_old=%var%
  25. if %num% lss 60 goto :lp
  26. for /l %%i in (1 1 %LMAX%) do echo !line%%i:~,%C%!
  27. endlocal
  28. pause
复制代码

作者: 随风    时间: 2009-5-11 01:38

一年前的帖了,这是我当时用的代码,发现用 netbenton 会员 说的用()把语句扩起来效率是大有提升,值得提倡。 我当时是要创建1000条这样的东东。。
但这样,大多数情况下就都得开启变量延迟了。。。^_^
:
  1. @echo off&setlocal enabledelayedexpansion&color 1f
  2. set /a ko=60,su=3
  3. (
  4. for /l %%a in (1 1 %ko%) do set "kg= !kg!"
  5. for /l %%L in (1 1 %su%) do (
  6.    set /a sh=0,sl=-1,zh=0
  7.    setlocal enabledelayedexpansion
  8.    for /l %%i in (1 1 %ko%) do (
  9.       set /a w=!random!%%2
  10.        if not "!temp!"=="!w!" (
  11.           set "num1=!num1!!w!"
  12.           set /a sh=1,sl+=1
  13.           ) else (
  14.             set /a sh+=1
  15.             for %%k in (!sh!) do (
  16.                set "num%%k=!num%%k!!kg!"
  17.                for %%g in (!sl!) do set "num%%k=!num%%k:~0,%%g!!w!"
  18.             )
  19.        )
  20.         set "temp=!w!"
  21.         if !zh! lss !sh! set /a zh=sh
  22.    )
  23.    for /l %%i in (1 1 !zh!) do (
  24.       set "num%%i=!num%%i:0=○!"
  25.       set "num%%i=!num%%i:1=●!"
  26.       echo !num%%i: = !
  27.    )
  28.    endlocal&echo/
  29. ))
  30. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2