ila 发表于 2016-1-12 10:41:01

关于数字文件名的文件排序

例如我的文件名是
1-1.txt
1-2.txt
.
.
.
1-10.txt
1-11.txt
.
.
1-100.txt
1-101.txt

用FileFindFirstFile遍历读取,
或用_FileListToArray获取的文件名,
排序不符合要求:
1-1.txt
1-10.txt
1-101.txt
.
.
1-109.txt
1-11.txt
.
.


现在暂时的解决办法不适合大批量应用,如下:Local $all1,$all2,$i=1,$ii=1
While 1
        $txt1=FileRead("1-"&$i&".txt")
        If @error Then ExitLoop
        $all1&=$txt1&@CRLF
        $i+=1
WEnd

While 1
        $txt2=FileRead("2-"&$ii&".txt")
        If @error Then ExitLoop
        $all2&=$txt2&@CRLF
        $ii+=1
WEnd

MsgBox(0,0,$all1&$all2)请问有没有办法读取到的文件名是按照如下排序的?1-1.txt
1-2.txt
.
.
.
1-10.txt
1-11.txt
.
.
1-100.txt
1-101.txt

haijie1223 发表于 2016-1-12 11:18:33

这样不行吗?Dim $hfile, $i
Dim $text, $str

For $i = 1 To 2000
        $hfile = FileOpen(@ScriptDir & "\1-" & $i & ".txt", 8 + 1)
        FileWrite($hfile, $i)
        FileClose($hfile)
Next
$i = 1
While 1
        $hfile = FileOpen(@ScriptDir & "\1-" & $i & ".txt")
        $text = FileRead($hfile)
        If @error Then ExitLoop
        FileClose($hfile)
        $str &= $text & @CRLF
        $i += 1
WEnd
MsgBox(0, 0, $str)

ila 发表于 2016-1-12 11:36:17

本帖最后由 ila 于 2016-1-12 11:37 编辑

回复 2# haijie1223
文件名虽然按照数字顺序,但有变化,例如:1-1.txt或1-02.txt

百度,发现dos很强大,Copy *.txt book.txt这样完全符合我的要求。
但是,想要用autoit来实现,
不知道能否用正则来排序。

haijie1223 发表于 2016-1-12 13:00:18

没有明白你要做什么?

ila 发表于 2016-1-12 13:47:25

本帖最后由 ila 于 2016-1-12 13:49 编辑

没有明白你要做什么?
haijie1223 发表于 2016-1-12 13:00 http://www.autoitx.com/images/common/back.gif
把上述名称的文件,按照要求的排序读取,合并成一个文件。
最近看小说,很多chm格式文件反编译后都是几十几百个txt文件,想要按照章节顺序合并起来。
用FileFindFirstFile遍历读取,
或用_FileListToArray获取的不符合目标排序。


而dos命令直接把这;两步做完了。
希望可以用au3做到上述要求。

haijie1223 发表于 2016-1-12 15:02:09

回复 5# ila


    按你说的,估计copy命令也不会得到正确的顺序。

ila 发表于 2016-1-12 15:10:00

回复ila


    按你说的,估计copy命令也不会得到正确的顺序。
haijie1223 发表于 2016-1-12 15:02 http://www.autoitx.com/images/common/back.gif

排序正确,我再试试其它的

fuldho 发表于 2016-1-13 09:16:42

回复 6# haijie1223


    copy命令是按文件名排序,au3是按先后

haijie1223 发表于 2016-1-13 09:37:42

回复 8# fuldho


    楼主说文件名可能是 1-1 1-2...1-0011-002
我先建立了1-1,1-2,...,1-2000,然后建立1-001。结果COPY命令把1-001放在最后了,AU3也放在最后。

haijie1223 发表于 2016-1-13 09:39:57

回复 8# fuldho


    有关排序问题,早就提问过。
http://www.autoitx.com/thread-47067-1-1.html

afan 发表于 2016-1-13 10:12:10

先将文件名中的数字统一在其左边补0到一指定的最大位数,(比如5位:1-10.txt 补0后 00001-00010.txt)
再用 _ArraySort() 排序

haijie1223 发表于 2016-1-13 16:19:18

回复 11# afan


    Good idea

ila 发表于 2016-1-14 08:38:36

先将文件名中的数字统一在其左边补0到一指定的最大位数,(比如5位:1-10.txt 补0后 00001-00010.txt)
再 ...
afan 发表于 2016-1-13 10:12 http://www.autoitx.com/images/common/back.gif

嘿,好办法,
从其它角度来看。
我试试。

skyfree 发表于 2016-1-17 17:12:03

有这么复杂么,如果你这些文件都在同一个目录下,用_FileListToArray获取所有文件名到数组,不在同一个目录下用你目前的方法获取所有文件到数组。数组获取完毕后,自己根据需求写一套排序规则不就行了?

ila 发表于 2016-1-18 08:19:52

回复 14# skyfree
获取到的文件名不同,有1-1.txt,也有1-01.txt等等。
最后找网友写了个批处理,搞定了。
页: [1]
查看完整版本: 关于数字文件名的文件排序