中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助] - 随机读取指定文本的一行
作者:
标题: [求助] - 随机读取指定文本的一行 上一主题 | 下一主题
h2o
初级用户





积分 44
发帖 18
注册 2006-10-9
状态 离线
『楼 主』:  [求助] - 随机读取指定文本的一行

……
:var1
for /f  %%a in (cont.txt) do (
随机从 cont.txt 中读一行
)
……

for /f  %%a in (a.txt) do (
echo %%a
call :var1
echo 上面这个 call :var1 读取到的  一行  内容

)
==================
请问,这个  "随机从 cont.txt 中读一行"  可以实现吗?

附:
a.txt
------------------
25651970
258849156
258849116
258849007
258848294
258848275
258848272
258848252
88848250
……  ( 约 百 行 )


cont.txt
-----------------
知否 知否,应是绿肥红瘦
月落乌蹄霜满天 江枫渔火对愁眠
转轴拨弦三两声 未成曲调先有情
春花秋月何时了
往事知多少
小楼昨夜又东风
银烛秋光冷画屏 轻罗小扇扑流萤
…… ( 约 200 行 )

============================
还想实现另外一个功能,就是 call :var2
call :var2 读取的就不是随机的 而是 a.txt 和 cont.txt 一行一行对应的,比如:

25651970
知否 知否,应是绿肥红瘦

258849156
月落乌蹄霜满天 江枫渔火对愁眠

258849116
转轴拨弦三两声 未成曲调先有情
……


==============
呵呵 真是不好意思 又来麻烦大家 :D

2006-10-18 04:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

可以配合 %random% 、% 、 for /f "skip=" 、 goto 一起用。

PS: 我在想你的第一个文件有什么用处。

[ Last edited by NaturalJ0 on 2006-10-18 at 04:55 ]

2006-10-18 04:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 3 楼』:  

没有看明白楼主想做什么

2006-10-18 05:38
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 4 楼』:  

  建议:多用论坛里的搜索功能。

  先链接一个类似的讨论贴过来:一个关于随机获取文件名的问题.



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-18 05:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 5 楼』:  

嘎嘎~ 楼主的提问真难理解. 以下是你要的两段代码:
::随机抽取cont中的一行, 显示在a.txt每一行的下面.

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (a.txt) do (
    echo %%c
    call :var1
    echo !ii!
)
pause
goto :eof

:var1
for /f "tokens=* skip=%random:~-2%" %%i in (cont.txt) do (
    set ii=%%i
    goto :eof
)

::a.txt与cont.txt中每一行准确对应, 显示的行数将以行数最少的一个文本为准.

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%c in (a.txt) do (
    set /a num+=1
    set num_=
    for /f "tokens=*" %%i in (cont.txt) do (
        set /a num_+=1
        if "!num!"=="!num_!" (
            echo %%c
            echo %%i
        )
    )
)
pause
[ Last edited by pengfei on 2006-10-18 at 09:55 ]

2006-10-18 09:54
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
h2o
初级用户





积分 44
发帖 18
注册 2006-10-9
状态 离线
『第 6 楼』:  

2 楼 NaturalJ0 ,
PS: 我在想你的第一个文件有什么用处。
---------
回 NaturalJ0 朋友,
哈哈哈 这个啊 第一个文件是一个记录的id的列表
我想实现对应一个 id,后面附加另一条记录(cont.txt 中的一行内容)
===============================

是我表达的的不够明白 呵呵

我补充一下,

概括点说呢,呃 就是运行代码 然后会从 cont.txt 这个多行的文本中 随机的读取一行(只要一行)的内容出来。
===============================
to namejm 版主,
我搜索了哦 那个文章我之前也有看了的 可是
里边的代码好多我都不能理解 不能将它们改装为己用,所以只好发个新贴子了



2006-10-18 11:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
h2o
初级用户





积分 44
发帖 18
注册 2006-10-9
状态 离线
『第 7 楼』:  

啊?我刚刷新 哎呀 感动感动 谢谢 pengfei 朋友,太感动了


我测试一下先


2006-10-18 11:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 8 楼』:  


@echo off
setlocal ENABLEDELAYEDEXPANSION
    set file=a.txt
    set file2=b.txt

:start
    for /f "delims=: tokens=1,*" %%i in ('findstr /n . %file%') do set "%%i=%%j" && set num=%%i
    set /a "col=%random% %% 100"
    set /a col2 = %col% - 1
    for /f "skip=%col2% delims=" %%i in (%file2%) do echo !%col%! && echo %%i && goto next

:next
pause
假设两个文件都只有100行。
功能1,2都整合在里面.

2006-10-18 11:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yardian
中级用户




积分 305
发帖 85
注册 2005-5-23
状态 离线
『第 9 楼』:  

虽然现在用不着,先收起来以后备用

2006-10-18 12:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: