Board logo

标题: [求助] - 随机读取指定文本的一行 [打印本页]

作者: h2o     时间: 2006-10-18 04:33    标题: [求助] - 随机读取指定文本的一行

……
: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
作者: NaturalJ0     时间: 2006-10-18 04:53
可以配合 %random% 、% 、 for /f "skip=" 、 goto 一起用。

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

[ Last edited by NaturalJ0 on 2006-10-18 at 04:55 ]
作者: vkill     时间: 2006-10-18 05:38
没有看明白楼主想做什么
作者: namejm     时间: 2006-10-18 05:56
  建议:多用论坛里的搜索功能。

  先链接一个类似的讨论贴过来:一个关于随机获取文件名的问题.
作者: pengfei     时间: 2006-10-18 09:54
嘎嘎~ 楼主的提问真难理解. 以下是你要的两段代码:
::随机抽取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 ]
作者: h2o     时间: 2006-10-18 11:06
2 楼 NaturalJ0 ,
PS: 我在想你的第一个文件有什么用处。
---------
回 NaturalJ0 朋友,
哈哈哈 这个啊 第一个文件是一个记录的id的列表
我想实现对应一个 id,后面附加另一条记录(cont.txt 中的一行内容)
===============================

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

我补充一下,

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


作者: h2o     时间: 2006-10-18 11:11
啊?我刚刷新 哎呀 感动感动 谢谢 pengfei 朋友,太感动了


我测试一下先

作者: 3742668     时间: 2006-10-18 11:33

@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都整合在里面.
作者: yardian     时间: 2006-10-18 12:54
虽然现在用不着,先收起来以后备用