通过数组给您的文件排序

当您使用FILESYSTEMOBJECT对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组给它们排排序儿。

如果您想通过名字排序,那将是非常简单的,但是假如你想通过文件大小或者文件创立时间等等来排序的时候,那么将有点麻烦。我们将通过二维数组做到这一点。

下面的代码演示了如何通过选择排序方式达到的我们目的,单击排序,点两次就反着排了。

<HTML>

<HEAD>

<TITLE>文件排序演示</TITLE>

</HEAD>

<BODY>

<%

' 设定一个演示目录,:)

CONST DIRECTORY = "/"

' 用常数定义排序方式

CONST FILE_NAME = 0 '按照名字排序……依次类推

CONST FILE_EXT = 1

CONST FILE_TYPE = 2

CONST FILE_SIZE = 3

CONST FILE_CREATED = 4

CONST FILE_MODIFIED = 5

CONST FILE_ACCESSED = 6

'获得 排序命令,默认为按照名字排序

req = Request("sortBy")

If Len(req) < 1 Then sortBy = 0 Else sortBy = CInt(req)

req = Request("priorSort")

If Len(req) < 1 Then priorSort = -1 Else priorSort = CInt(req)

'设置倒序

If sortBy = priorSort Then

reverse = true

priorSort = -1

Else

reverse = false

priorSort = sortBy

End If

' 接下来开始我们真正的代码了。。。

path = Server.MapPath( DIRECTORY )

Set fso = CreateObject("Scripting.FileSystemObject")

Set theCurrentFolder = fso.GetFolder( path )

Set curFiles = theCurrentFolder.Files

' 给这些文件做一个循环

Dim theFiles( )

ReDim theFiles( 500 ) ' 我随便定的一个大小

currentSlot = -1 ' start before first slot

' 我们将文件的所有相关信息放到数组里面

For Each fileItem in curFiles

fname = fileItem.Name

fext = InStrRev( fname, "." )

If fext < 1 Then fext = "" Else fext = Mid(fname,fext+1)

ftype = fileItem.Type

fsize = fileItem.Size

fcreate = fileItem.DateCreated

fmod = fileItem.DateLastModified

faccess = fileItem.DateLastAccessed

currentSlot = currentSlot + 1

If currentSlot > UBound( theFiles ) Then

ReDim Preserve theFiles( currentSlot + 99 )

End If

' 放到数组里

theFiles(currentSlot) = Array(fname,fext,ftype,fsize,fcreate,fmod,faccess)

Next

' 现在都在数组里了,开始下一步

fileCount = currentSlot ' 文件数量

ReDim Preserve theFiles( currentSlot )

' 排序

' (8 表示 string)

If VarType( theFiles( 0 )( sortBy ) ) = 8 Then

If reverse Then kind = 1 Else kind = 2 ' 给字符排序

Else

If reverse Then kind = 3 Else kind = 4 '数字、时间。。。

End If

For i = fileCount TO 0 Step -1

minmax = theFiles( 0 )( sortBy )

minmaxSlot = 0

For j = 1 To i

Select Case kind

Case 1

mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) < 0)

Case 2

mark = (strComp( theFiles(j)(sortBy), minmax, vbTextCompare ) > 0)

Case 3

mark = (theFiles( j )( sortBy ) < minmax)

Case 4

mark = (theFiles( j )( sortBy ) > minmax)

End Select

If mark Then

minmax = theFiles( j )( sortBy )

minmaxSlot = j

End If

Next

If minmaxSlot <> i Then

temp = theFiles( minmaxSlot )

theFiles( minmaxSlot ) = theFiles( i )

theFiles( i ) = temp

End If

Next

' 结束

%>

<FORM Name="doSort" Method="Get">

<INPUT Type=Hidden Name=priorSort Value="<% = priorSort %>">

<INPUT Type=Hidden Name=sortBy Value="-1">

</FORM>

<SCRIPT Language="JavaScript">

function reSort( which )

{

document.doSort.sortBy.value = which;

document.doSort.submit( );

}

</SCRIPT>

<CENTER>

<FONT Size="+2">

显示<% = (fileCount+1) %> 该目录下的文件<% = path %>

</FONT>

<P>

单击排序,再点一次反向排序

<P>

<TABLE Border=1 CellPadding=3>

<TR>

<TH><A HREF="javascript:reSort(0);">文件名</A></TH>

<TH><A HREF="javascript:reSort(1);">扩展名</A></TH>

<TH><A HREF="javascript:reSort(2);">类型</A></TH>

<TH><A HREF="javascript:reSort(3);">大小</A></TH>

<TH><A HREF="javascript:reSort(4);">建立时间</A></TH>

<TH><A HREF="javascript:reSort(5);">上次修改时间</A></TH>

<TH><A HREF="javascript:reSort(6);">上次存取时间</A></TH>

</TR>

<%

For i = 0 To fileCount

Response.Write "<TR>" & vbNewLine

For j = 0 To UBound( theFiles(i) )

Response.Write " <TD>" & theFiles(i)(j) & "</TD>" & vbNewLine

Next

Response.Write "</TR>" & vbNewLine

Next

%>

</TABLE>

</BODY>

</HTML>

(0)

相关推荐

  • 通过数组给您的文件排序

    当您使用FILESYSTEMOBJECT对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组给它们排排序儿. 如果您想通过名字排序,那将是非常简单的,但是假如你想通过文件大小或者文件创立时间等等来排序的时候,那么将有点麻烦.我们将通过二维数组做到这一点. 下面的代码演示了如何通过选择排序方式达到的我们目的,单击排序,点两次就反着排了. <HTML> <HEAD> <TITLE>文

  • PHP实现二维数组按某列进行排序的方法

    本文实例讲述了PHP实现二维数组按某列进行排序的方法.分享给大家供大家参考,具体如下: /* * 二维数组 按某列排序 * array_multisort($arr1,$arr2) * 手册 例子如下 * */ $data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edi

  • python文件排序的方法总结

    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1)首先:我测试的文件夹是/img/,里面的文件都是图片,如下图所示: (2)测试库函数sorted(),直接贴出代码: import numpy as np import os   img_path='./img/'   img_list=sorted(os.listdir(img_path))#文

  • PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】

    本文实例讲述了PHP编程实现多维数组按照某个键值排序的方法.分享给大家供大家参考,具体如下: 实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种: array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=>array('catid'=>'1546','catname'=>'数组排序 一级','co

  • php usort 使用用户自定义的比较函数对二维数组中的值进行排序

    今天发现一个很好用二维数组排序的php方法,usort,推荐给大家,以后二维数组里面,要按照一个字段的值排序用这个方法简单高效,例如下面的数组: [guess_subject] => Array ( [0] => Array ( [subject_id] => 4587 [game_id] => 9228 [parent_category_id] => 78 [subject_title] => 全场比赛两队总得分之和是 [subject_date_time] =>

  • php对二维数组进行相关操作(排序、转换、去空白等)

    技巧提示: array_keys($array) //返回所有键名 array_values($array) //返回所有键值 $result=array_reverse($input); //将数组颠倒,不保留键名 $result_keyed=array_reverse($input,true); //将数组颠倒,保留键名 array_keys($array,"blue"); //返回值为blue的键名 1. PHP二维数组去重复项函数  PHP数组去除重复项有个内置函数array_

  • PHP 二维关联数组根据其中一个字段排序(推荐)

    PHP 中二维关联数组如何根据其中一个字段进行排序,下面的代码将二维关联数组 $array 根据 $orderby 字段进行排序: function wpjam_array_multisort($array, $orderby, $order = SORT_ASC, $sort_flags = SORT_NUMERIC){ $refer = array(); foreach ($array as $key => $value) { $refer[$key] = $value[$orderby];

  • Python实现大文件排序的方法

    本文实例讲述了Python实现大文件排序的方法.分享给大家供大家参考.具体实现方法如下: import gzip import os from multiprocessing import Process, Queue, Pipe, current_process, freeze_support from datetime import datetime def sort_worker(input,output): while True: lines = input.get().splitlin

  • Android编程实现对文件夹里文件排序的方法

    本文实例讲述了Android编程实现对文件夹里文件排序的方法.分享给大家供大家参考,具体如下: private int mFileSize = 0; private List<String> mPathString = new ArrayList<String>(); private boolean sortFolder(String path) { if (path == null || StringUtil.isEmpty(path)) return false; File[]

  • C#中数组初始化、反转和排序用法实例

    本文实例讲述了C#中数组初始化.反转和排序用法.分享给大家供大家参考.具体如下: 下面的代码演示了在C#中定义和初始化数组,然后对其进行赋值,排序和反转的操作方法: using System; public class ArraySample { public static void Main() { // Create and initialize a new array instance. Array strArr = Array.CreateInstance(typeof(string),

随机推荐