เมื่อคุณใช้อ็อบเจ็กต์ FILESYSTEMOBJECT เพื่อรับรายการไฟล์ในไดเร็กทอรี คุณพบว่าคุณไม่สามารถควบคุมวิธีการจัดเรียงไฟล์ได้ เช่น การเรียงลำดับตามชื่อ การเรียงลำดับตามนามสกุล การเรียงลำดับตามขนาดไฟล์ เป็นต้น เรามาลองกัน ใช้อาร์เรย์เพื่อจัดเรียงตามลำดับ
หากคุณต้องการจัดเรียงตามชื่อก็จะง่ายมาก แต่ถ้าคุณต้องการจัดเรียงตามขนาดไฟล์หรือเวลาในการสร้างไฟล์ ฯลฯ ก็จะยุ่งยากเล็กน้อย เราจะทำสิ่งนี้ผ่านอาร์เรย์ 2 มิติ
รหัสต่อไปนี้สาธิตวิธีการบรรลุเป้าหมายโดยการเลือกและการเรียงลำดับ คลิกเพื่อเรียงลำดับ และคลิกสองครั้งเพื่อเรียงลำดับย้อนกลับ
<HTML> <หัว> <TITLE>สาธิตการเรียงลำดับไฟล์</TITLE> </HEAD> <ร่างกาย> - 'ตั้งค่าไดเร็กทอรีสาธิต :) ไดเรกทอรี CONST = / ' ใช้ค่าคงที่เพื่อกำหนดวิธีการเรียงลำดับ 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 = คำขอ (sortBy) ถ้า Len(req) < 1 ดังนั้น sortBy = 0 อย่างอื่น sortBy = CInt(req) req = คำขอ (priorSort) ถ้า Len(req) < 1 ดังนั้น PriorSort = -1 Else PriorSort = CInt(req) 'ตั้งลำดับย้อนกลับ ถ้า sortBy = PriorSort แล้ว ย้อนกลับ = จริง เรียงลำดับก่อน = -1 อื่น ย้อนกลับ = เท็จ PriorSort = เรียงลำดับตาม สิ้นสุดถ้า ' ต่อไปเราจะเริ่มโค้ดจริงของเรา - - เส้นทาง = Server.MapPath (DIRECTORY) ตั้งค่า fso = CreateObject (Scripting.FileSystemObject) ตั้งค่า CurrentFolder = fso.GetFolder(path) ตั้งค่า curFiles = theCurrentFolder.Files 'ทำการวนซ้ำไฟล์เหล่านี้ หรี่ไฟล์ () ReDim theFiles(500) ' ฉันตั้งค่าขนาดสุ่ม currentSlot = -1 ' เริ่มก่อนช่องแรก 'เราใส่ข้อมูลที่เกี่ยวข้องทั้งหมดของไฟล์ลงในอาร์เรย์ สำหรับแต่ละรายการ fileItem ใน curFiles fname = fileItem.Name fext = InStrRev(fname, .) ถ้า fext < 1 ดังนั้น fext = อื่น fext = Mid(fname,fext+1) ftype = fileItem.Type fsize = fileItem.Size fcreate = fileItem.DateCreated fmod = fileItem.DateLastModified faccess = fileItem.DateLastAccessed currentSlot = ปัจจุบันSlot + 1 ถ้า currentSlot > UBound(theFiles) แล้ว ReDim รักษาไฟล์ (currentSlot + 99) สิ้นสุดถ้า 'ใส่มันเข้าไปในอาร์เรย์' theFiles(currentSlot) = อาร์เรย์ (fname,fext,ftype,fsize,fcreate,fmod,faccess) ต่อไป 'เมื่อทุกอย่างอยู่ในอาร์เรย์แล้ว ให้เริ่มขั้นตอนต่อไป fileCount = currentSlot 'จำนวนไฟล์ ReDim รักษาไฟล์ (currentSlot) ' เรียงลำดับ ' (8 หมายถึงสตริง) ถ้า VarType(theFiles(0)(sortBy)) = 8 จากนั้น หากย้อนกลับแล้ว kind = 1 Else kind = 2 ' จัดเรียงอักขระ อื่น ถ้าย้อนกลับก็ชนิด = 3 ชนิดอื่น = 4 'ตัวเลข เวลา - - สิ้นสุดถ้า สำหรับ i = fileCount ถึง 0 ขั้นตอน -1 minmax = theFiles(0)(เรียงลำดับตาม) ขั้นต่ำแม็กซ์สล็อต = 0 สำหรับ j = 1 ถึง i เลือกประเภทตัวพิมพ์ กรณีที่ 1 เครื่องหมาย = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) < 0) กรณีที่ 2 เครื่องหมาย = (strComp(theFiles(j)(sortBy), minmax, vbTextCompare) > 0) กรณีที่ 3 เครื่องหมาย = (theFiles(j)(sortBy) < minmax) กรณีที่ 4 เครื่องหมาย = (theFiles(j)(sortBy) > minmax) สิ้นสุดการเลือก ถ้าทำเครื่องหมายแล้ว minmax = theFiles(j)(sortBy) minmaxSlot = เจ สิ้นสุดถ้า ต่อไป ถ้า minmaxSlot <> ฉันแล้ว temp = theFiles (minmaxSlot) theFiles(minmaxSlot) = theFiles(i) theFiles(i) = อุณหภูมิ สิ้นสุดถ้า ต่อไป ' เสร็จ - <ชื่อแบบฟอร์ม=วิธี doSort=รับ> <ประเภทอินพุต=ชื่อที่ซ่อนอยู่=ค่าpriorSort=<% = PriorSort %>> <ประเภทอินพุต=ชื่อที่ซ่อนอยู่=เรียงลำดับตามค่า=-1> </รูปแบบ> <ภาษาสคริปต์=จาวาสคริปต์> ฟังก์ชั่น reSort (ซึ่ง) - document.doSort.sortBy.value = ซึ่ง; document.doSort.ส่ง(); - </สคริปต์> <ศูนย์> <ขนาดตัวอักษร=+2> แสดงไฟล์ <% = (fileCount+1) %> ในไดเร็กทอรีนี้ <% = path %> </FONT> <ป> คลิกเรียงลำดับแล้วคลิกเรียงลำดับย้อนกลับอีกครั้ง <ป> <เส้นขอบตาราง=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> - สำหรับ i = 0 ถึง fileCount การตอบกลับเขียน <TR> & vbNewLine สำหรับ j = 0 ถึง UBound(theFiles(i)) การตอบสนองเขียน <TD> & theFiles(i)(j) & </TD> & vbNewLine ต่อไป การตอบกลับเขียน </TR> & vbNewLine ต่อไป - </ตาราง> </ร่างกาย> </HTML> |