中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » 论坛回收站 » [讨论]这里的random和sort是如何导致乱序的?
作者:
标题: [讨论]这里的random和sort是如何导致乱序的? 上一主题 | 下一主题
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『楼 主』:  [讨论]这里的random和sort是如何导致乱序的?

看不太懂 ,拿来一起看看

这段批处理乱序文本使用的原理是什么呢?


@echo off
::说明----将文本中的所有内容无规则打乱顺序排列
@echo off
if "%1" neq "$" (
for /f "tokens=2 delims=#" %%a in ('"%~0" $^|sort') do echo %%a
pause>nul
) else for /f "delims=" %%i in (test.txt) do call echo %%random:~-1%%%%random:~-1%% #%%i


哦! 原来是sort排列了随机数  ,这里我糊涂了...

[ Last edited by gool123456 on 2010-8-23 at 14:29 ]



Discuz! 现在时间
2010-8-23 04:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 2 楼』:  帖子标题已修改. 太久没发帖了.标题都忘了标关键字了...

有种耐人寻味的感觉。。。

回:523066680
这是在网上搜索问题看到的.

[ Last edited by gool123456 on 2010-8-23 at 14:39 ]



Discuz! 现在时间
2010-8-23 04:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 3 楼』:  

代码好像是bathome的 terse 回复的吧?

这个批处理是要双击运行的, 直接双击的时候参数是空, 也就是第一个参数不等于"$"
进入,第一个for:

for读取这条命令的数据,
('"%~0" $^|sort')    ,而 %~0 $^|sort 是先调用自身,参数为$,并把结果交给sort 排序。

{ 那么现在又进了一个层次,脚本自身被调用,参数为$ ,进入第二个for ,他负责读取test.txt 每一行并在前面加一堆随机数并输出 }

在调用结束时就回到了之前,也就是 ('"%~0" $^|sort'), 这些数据因为开头的随机数被 sort 排序,排序后导致后面的数据被打乱。 然后交给for
"tokens=2 delims=#"  只读每一行取随机数后面的内容

[ Last edited by 523066680 on 2010-8-23 at 09:42 ]



综合型编程论坛

我的作品索引
  
2010-8-23 09:40
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 4 楼』:  

分开来应该就容易看一点了:
a.bat

  Quote:
@echo off
if "%1" neq "$" (
for /f "tokens=2 delims=#" %%a in ('b.bat ^|sort') do echo %%a
pause>nul
)

b.bat

  Quote:
@echo off
for /f "delims=" %%i in (test.txt) do call echo %%random:~-1%%%%random:~-1%% #%%i

重点是在前面加”随机数#每一行",sort对加了随机数的内容排序后导致原来的数据乱序, 然后for 读取结果 ,以#为分割,只读取第一个#之后的内容,也就是扔掉随机数并显示出来。
然后

[ Last edited by 523066680 on 2010-8-23 at 09:48 ]



综合型编程论坛

我的作品索引
  
2010-8-23 09:45
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: