已解决 如何给文件夹中的文件排序 要求 跟资源管理器 按名称排序的顺序一样
本帖最后由 Mixrelax 于 2018-9-27 08:42 编辑如何给文件夹中的文件排序
要求 跟资源管理器 按名称排序的顺序一样
用 _FileListToArray (Rec) ,FindFileNext ,Dir /on, Tree /F, _ArraySort, 冒泡排序,_ArrayMax等函数都将 10排在了最前头
听说单位数前面补0就可以解决,是了的确可以。不过有没有更好的办法 。向微软在资源管理器中给出的正确排序一样。
中午起来没事儿写着玩儿,实在没时间整理代码,思路不知道弯不弯曲,但至少实现了需求。
#include <Array.au3>
#include <File.au3>
$aFileArray = _FileListToArray(@ScriptDir & '\test')
_ArrayDisplay($aFileArray)
; 冒泡
For $i = 1 To $aFileArray - 1
For $j = 1 To $aFileArray - 1
;~ MsgBox(0, $aFileArray[$j] & '--' & $aFileArray[$j + 1], __CompareByUnicode($aFileArray[$j], $aFileArray[$j + 1]))
If (__CompareByUnicode($aFileArray[$j], $aFileArray[$j + 1]) == -1) Then
Dim $tmpSwap = $aFileArray[$j]
$aFileArray[$j] = $aFileArray[$j + 1]
$aFileArray[$j + 1] = $tmpSwap
EndIf
Next
Next
_ArrayDisplay($aFileArray)
; 根据字符顺序做对比
Func __CompareByUnicode($sSrc, $sDest)
Local $nSrcLength = StringLen($sSrc)
Local $nDestLength = StringLen($sDest)
; 先对比长度是否一致
If ($nSrcLength > $nDestLength) Then
Return -1
ElseIf ($nSrcLength < $nDestLength) Then
Return 1
Else
; 在对比字符顺序)
For $i = 1 To $nSrcLength
Local $cSrcChar = StringMid($sSrc, $i, 1)
Local $cDestChar = StringMid($sDest, $i, 1)
If (AscW($cSrcChar) > AscW($cDestChar)) Then
Return -1
ElseIf (AscW($cSrcChar) < AscW($cDestChar)) Then
Return 1
Else
ContinueLoop
EndIf
Next
EndIf
Return 0
EndFunc
我也凑个热闹。{:face (303):}#include <Array.au3>
Dim $A =
For $j = 1 To UBound($A)-1
For $i = $j+1 To UBound($A)-1
If Number(StringRegExp($A[$i], '\d+', 1)) < Number(StringRegExp($A[$j], '\d+', 1)) Then
$temp = $A[$i]
$A[$i] = $A[$j]
$A[$j] = $temp
EndIf
Next
Next
_ArrayDisplay($A)
不要直接比较大小,第x章这个字符串掐头去尾,x-y>0的比较模式来排序 具体代码自己去写吧,不难
页:
[1]