峰睿桃 发表于 2024-6-8 08:53:37

fso读取中文文件 按照中文里面的数字来排序

这几天帮客户做一个自动上传数据的程序,做到最后发现 不会按照名称来排序,所有就得研究为什么了,好了直接来贴下数据好了
   
    目录数据如下:
   
   
   
    图片1
   
    上面是客户 的一个目录里面的数据。当然他有很多。这些不在我们研究的范围内
   
    刚程序程序是这样的
   
    %
   
    dir = shipin
   
    Set fso = CreateObject(scripting.FileSystemObject)'创建文件对象
   
    Set f = fso.GetFolder(server.MapPath(dir)) '读取文件夹
   
    Set ff =f.Files'取文件名称
   
    For Each f1 in ff '循环目录
   
    filename=f1.name'取得文件名称
   
    Response.Write(filename)
   
    Next
   
    %
   
    这样就可以读取到这个目录的文件名称了,当然这个大家都会了
   
    问题是他默认是 倒着来的。那么我们就要去改变他的排序方式。不同于php php的话有专门的函数可以解决,比如 ksort natsort
   
    那么我们要怎么改变他了。一个思路就这样的。取文件的 名称并把中文过滤掉,然后利用循环判断每个数组大小 来改变,当然这样效率会变低。但是也没办法了。只能放他慢慢运行啊,如果大家有好的方法记得分享,代码如下:
   
    %
   
    '取文件名称数组函数
   
    function RegExpTestsp(str,pat)
   
    Dim r, Match, Matches
   
    Set r = New RegExp
   
    r.Pattern = pat
   
    r.IgnoreCase = false
   
    r.Global = True
   
    Set Matches = r.Execute(str)
   
    For Each Match in Matches
   
    RetStr = RetStrMatch.Value
   
    Next
   
    RegExpTestsp = RetStr
   
    End function
   
    pat=[\d]+
   
    '排序 函数
   
    Function Sort1(input)
   
    Dim outPut
   
    'Dim input
   
    Dim i
   
    i=0
   
    Dat=split(input,,)
   
    For k=0 to Ubound(Dat)
   
    For i=0 to ubound(Dat)-1
   
    If int(RegExpTestsp(Dat(i+1),pat))
   
    outPut=Dat(i)
   
    Dat(i)=Dat(i+1)
   
    Dat(i+1)=outPut
   
    End If
   
    Next
   
    Next
   
    '
   
    For each outPut in Dat
   
    Response.Write outPut
   
    next
   
    End Function
   
    dir = shipin
   
    Set fso = CreateObject(scripting.FileSystemObject)'创建文件对象
   
    Set f = fso.GetFolder(server.MapPath(dir)) '读取文件夹
   
    Set ff =f.Files
   
    For Each f1 in ff '循环目录
   
    filename=filenamef1.name,
   
    Next
   
    'response.Write(filename)
   
    Sort1(filename)
   
    %
   
    这样就可以了! 这个程序大家利用到更加庞大的程序里面去。。请著名来之 智软品牌设计(小戴) 宁波网络公司
页: [1]
查看完整版本: fso读取中文文件 按照中文里面的数字来排序