注册 登录
编程论坛 ASP技术论坛

随机读取文件名

hebss 发布于 2010-12-07 15:07, 1201 次点击
文件夹下的名字不是根据数据库生成的,并且多为汉字,后缀为htm,请问怎样才能随机读取5条文件名?文件夹内都是htm文件,求ASP代码
12 回复
#2
hams2010-12-07 17:23
for i=1 to 5
判断记录是否到底,如果到底,返回记录头
读一条记录
随机数,并判断是否读取
如果不读取,i=i-1
next
#3
hebss2010-12-08 10:08
好像只有数字的才可以吧,或者说我没弄好
#4
hams2010-12-08 11:28
字符串就读不出来么
#5
hebss2010-12-08 13:35
麻烦hams版主看下
<%
Sub AllFiles(dirPath)
On Error Resume Next
if right(dirPath,1)<>"\" then dirPath=dirPath&"\"
Set FSO = CreateObject("scripting.filesystemobject")
Set f = FSO.GetFolder(dirPath)
Set fs = f.files
dim Str,Arr,a,Content,url,ShowContent
For Each fileN in fs
if  RegExpfind(".html",fileN.name) then
Str=fileN.name
 response.write str
 response.write "<br>"
end if
Next
Set FSO = Nothing
End sub
Function RegExpfind(patrn, strng)
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
RegExpfind = regEx.Test(strng)
End Function
AllFiles(server.mappath(""))
%>
以上代码可以读出所有html文件,就是不知道该添加什么代码才能做到随机读取5条

[ 本帖最后由 hebss 于 2010-12-8 13:40 编辑 ]
#6
sky2222010-12-08 14:18
<%
Sub AllFiles(dirPath)
On Error Resume Next
if right(dirPath,1)<>"\" then dirPath=dirPath&"\"
Set FSO = CreateObject("scripting.filesystemobject")
Set f = FSO.GetFolder(dirPath)
Set fs = f.files
dim Str,Arr,a,Content,url,ShowContent
i=0
For Each fileN in fs
i=i+1
if  RegExpfind(".html",fileN.name) then
Str=fileN.name
response.write str
response.write "<br>"
end if
Next
if i>4 then exit for
Set FSO = Nothing
End sub
Function RegExpfind(patrn, strng)
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
RegExpfind = regEx.Test(strng)
End Function
AllFiles(server.mappath(""))
%>


[ 本帖最后由 sky222 于 2010-12-8 14:20 编辑 ]
#7
hams2010-12-08 15:29
楼上的思路是对的,但还差两个东西
1、没有随机数
2、没有考虑到,如果记录数不足5个怎么处理?就算是记录超过5位,但经过随机数选择之后,就有可能不够。
#8
hams2010-12-08 15:31
另外
if i>4 then exit for
放错了地方,应该要放在FOR内
#9
hams2010-12-08 15:41
<%
Sub AllFiles(dirPath)
i=0
Randomize
On Error Resume Next
if right(dirPath,1)<>"\" then dirPath=dirPath&"\"
Set FSO = CreateObject("scripting.filesystemobject")
Set f = FSO.GetFolder(dirPath)
Set fs = f.files
dim Str,Arr,a,Content,url,ShowContent
For Each fileN in fs
  if  RegExpfind(".html",fileN.name) then
    Str=fileN.name
    if Rnd>0.6 then
      i=i+1
      response.write str&"<br>"
    end if
  end if
  if i>4 then exit for
Next
Set FSO = Nothing
End sub

Function RegExpfind(patrn, strng)
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
regEx.Global = True
RegExpfind = regEx.Test(strng)
End Function
AllFiles(server.mappath(""))
%>
以上代码同样没有解决不足五位的情况,思路是把读文件的指针恢复到开头,具体代码想不起来了,实在不行就做个循环把文件名再读一次,再到够5个。
#10
hebss2010-12-08 15:56
谢谢hams版主,已经成功了,同时也感谢sky222。
#11
hams2010-12-09 08:13
下次希望你自己先想想,先动手试试,我之所以没有一次告诉你完整的代码,也是希望你能自己动下脑和手,这样才能学到东西。
#12
hebss2010-12-11 10:28
回复 11楼 hams
不好意思,其实我什么也不懂,也不是专门搞设计的,纯属爱好,我的本职是机械生产,技术人员,没有学过asp,我网站上用的代码都是东拼西凑的。有需要修改的地方就在网上搜索,为一段代码找上一天两天的也是常事,确实没办法的时候,才求助别人,不劳而获真的不是我本意,希望能谅解,所以我对每位帮助过我的人深表谢意。今天我又是为找段代码而来的,我先找找看,尽量不麻烦大家。再次谢谢你的帮助,我没有用“您”是我感觉我的年龄会大一些吧,38岁了,现在学东西很吃力。
说了些废话..........
#13
hams2010-12-12 13:02
我也不是专门学这个的,初中的时候误打误撞跑到电脑室(高中才开电脑课)看他们玩,然后借他们的书来学BASIC,并用BASIC编了一套大炮打飞机的程序。
到高中的时候,高中(另一所学校)的那个电脑老师经常来请教我编程的问题
大学的时候我读的是中文类,自学并参加国家计算机等级水平考试
可以说,我没有正规地上过一堂编程课,全都是兴趣+自学
我相信你也可以做得到,我相信坛里的每个人都有机会可以做到,只是,要勤于动手动脑,一味求结果是学不到东西的。
年龄不是问题,你大不了我几岁
也没必要用“您”或特别地表示尊敬,坛子里每个人我都认为是平等的,网络带给我们的好处是可以完全抛开身份起地位。
端正学习态度其实才是对坛子里每一个人的尊重,因为我们这些技术版块与那些打情骂俏有着本质的区别,这要求我们严谨对待。

我认真地码上以上每一个字,也是希望大家很认真地写每一段代码,如果你想学编程,认真与严谨是基本要求,如果你不是来学编程,只是要为了完成一项作业,只为了求一段能用的代码,对不起,我帮不了你。(这里这个“你”不是对楼主所说,别误会)
1