解决asp fso数字排序问题 按照大小来排序-数组排序

这几天帮客户做一个自动上传数据的程序,做到最后发现 不会按照名称来排序,所有就得研究为什么了,好了直接来贴下数据好了

目录数据如下:

上面是客户 的一个目录里面的数据。当然他有很多。这些不在我们研究的范围内

刚程序程序是这样的

 

<%

 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 = RetStr & Match.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))<int(RegExpTestsp(Dat(i),pat)) Then
   outPut=Dat(i)
   Dat(i)=Dat(i+1)
   Dat(i+1)=outPut    
  End If
 Next
Next
'
For each outPut in Dat
  Response.Write outPut&"<br>"
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=filename&f1.name&","

Next

'response.Write(filename)
Sort1(filename)

%>

 


 

 

这样就可以了!