![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-24 14:15 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求教:如何显示一个文本内的随机行? |
| 可打印版本 2,405 / 20 |
| 第1楼 theoldman | 发表于 2007-02-03 02:59 |
| 初级用户 发帖 16 积分 39 | |
|
求教:如何显示一个文本内的随机行? 求教:如何显示一个文本内的随机行? 请DX赐教~~
ps:本人刚开始学习p处理,以后还请DX们多多指教T_T |
|
| 第2楼 qjbm | 发表于 2007-02-03 03:29 |
| 初级用户 发帖 44 积分 125 | |
| 第3楼 ccwan | 发表于 2007-02-03 03:40 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
to qjbm
兄的思路不错,但是代码无法处理空行,建议ECHO !r%s%!换成ECHO. !r%s%! |
|
| 第4楼 qjbm | 发表于 2007-02-03 04:02 |
| 初级用户 发帖 44 积分 125 | |
|
ccwan
FOR /F 对文本中的空行是跳过处理的. !r%s%!不会为空. [ Last edited by qjbm on 2007-2-2 at 03:04 PM ] |
|
| 第5楼 ccwan | 发表于 2007-02-03 04:10 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
re qjbm
看来兄没有测试,你的代码在处理空行时会出错,显示“关闭 echo”之类的信息。 你可以找一篇文档在里面输入空行试一下就会明白了。 |
|
| 第6楼 namejm | 发表于 2007-02-03 04:10 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
2楼的代码确实不错,但是,除了3楼所说的问题,还会存在一些缺陷:
1、因为使用了变量延迟语句,会把文本中的感叹号忽略; 2、普通的for语句会忽略以分号打头的行; 3、"tokens=*" 会忽略行首的所有空格; 4、如果行数巨大,那么,SET r!h!=%%i 会导致变量过多而出错; 换用一种思路,可以避免如上缺陷: 类似的问题曾经有过讨论,请看精华帖:一个关于随机获取文件名的问题. [ Last edited by namejm on 2007-2-2 at 03:13 PM ] |
|
| 第7楼 ccwan | 发表于 2007-02-03 04:19 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
jm的代码很精简了,思路居然和我一样。^_^
只是我用的是bagpipe帖子中的more /e <test.txt ,不如版主的代码简练。 |
|
| 第8楼 qjbm | 发表于 2007-02-03 04:29 |
| 初级用户 发帖 44 积分 125 | |
|
ccwan 兄麻烦测试下.
是不是我的测试方法不对??还是有什么别的问题, 我测试的时候就没有你说的情况. TEST.TXT [ Last edited by qjbm on 2007-2-2 at 03:31 PM ] |
|
| 第9楼 namejm | 发表于 2007-02-03 04:33 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
qjbm 的 for 语句确实会跳过空行,也就是说,没有处理空行,所以,echo 语句无须换为 echo. 语句。
|
|
| 第10楼 qjbm | 发表于 2007-02-03 04:36 |
| 初级用户 发帖 44 积分 125 | |
|
2楼代码确实存在6楼所述1.2.3.4项问题.
特殊字符是批处理的一块心病. [ Last edited by qjbm on 2007-2-2 at 03:39 PM ] |
|
| 第11楼 ccwan | 发表于 2007-02-03 04:38 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
re qjbm
请试试下面的内容 test.txt 在这段内容里没有特殊符号,只有空行。我就是拿它测试的。 |
|
| 第12楼 qjbm | 发表于 2007-02-03 04:40 |
| 初级用户 发帖 44 积分 125 | |
|
三人行,必有吾师
兄提供的测试文本中,从第3行开始,有的空行是有4个空格符,问题正出在这里. 2楼的代码确实有问题. [ Last edited by qjbm on 2007-2-2 at 03:49 PM ] |
|
| 第13楼 ccwan | 发表于 2007-02-03 04:51 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
确实如此,我一直当作是空行的,呵呵。也就是说,兄的代码真正不能处理的是特殊字符。
但我又有一个疑问,空行不能算作是文本中的某一行吗? [ Last edited by ccwan on 2007-2-3 at 04:55 AM ] |
|
| 第14楼 namejm | 发表于 2007-02-03 04:55 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
ccwan在11楼贴出来的文本看上去虽然每行都是以空行分隔,但是,实际情况并非如此,如果使用全选功能的话,就会发现 1) 到 4) 之间的空白部分存在特殊字符,从而导致echo语句报错,去掉这些特殊字符之后一切正常。
—————————————— 原来楼上两位已经发现了问题的所在,我的帖子就重复了。 [ Last edited by namejm on 2007-2-2 at 03:57 PM ] |
|
| 第15楼 ccwan | 发表于 2007-02-03 04:57 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
|
13楼提出疑问,空行应该也是文本中的某一行,那么是否应该把它也作为随机行显示?
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |