找回密码
 加入
搜索
查看: 4485|回复: 14

[系统综合] 关于数字文件名的文件排序

  [复制链接]
发表于 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
发表于 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)
 楼主| 发表于 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来实现,
不知道能否用正则来排序。
发表于 2016-1-12 13:00:18 | 显示全部楼层
没有明白你要做什么?
 楼主| 发表于 2016-1-12 13:47:25 | 显示全部楼层
本帖最后由 ila 于 2016-1-12 13:49 编辑
没有明白你要做什么?
haijie1223 发表于 2016-1-12 13:00

把上述名称的文件,按照要求的排序读取,合并成一个文件。
最近看小说,很多chm格式文件反编译后都是几十几百个txt文件,想要按照章节顺序合并起来。
用FileFindFirstFile遍历读取,
或用_FileListToArray获取的不符合目标排序。


而dos命令直接把这;两步做完了。
希望可以用au3做到上述要求。
发表于 2016-1-12 15:02:09 | 显示全部楼层
回复 5# ila


    按你说的,估计copy命令也不会得到正确的顺序。
 楼主| 发表于 2016-1-12 15:10:00 | 显示全部楼层
回复  ila


    按你说的,估计copy命令也不会得到正确的顺序。
haijie1223 发表于 2016-1-12 15:02


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2016-1-13 09:16:42 | 显示全部楼层
回复 6# haijie1223


    copy命令是按文件名排序,au3是按先后
发表于 2016-1-13 09:37:42 | 显示全部楼层
回复 8# fuldho


    楼主说文件名可能是 1-1 1-2  ...1-001  1-002
我先建立了1-1,1-2,...,1-2000,然后建立1-001。结果COPY命令把1-001放在最后了,AU3也放在最后。
发表于 2016-1-13 09:39:57 | 显示全部楼层
回复 8# fuldho


    有关排序问题,早就提问过。
http://www.autoitx.com/thread-47067-1-1.html
发表于 2016-1-13 10:12:10 | 显示全部楼层
先将文件名中的数字统一在其左边补0到一指定的最大位数,(比如5位:1-10.txt 补0后 00001-00010.txt)
再用 _ArraySort() 排序
发表于 2016-1-13 16:19:18 | 显示全部楼层
回复 11# afan


    Good idea
 楼主| 发表于 2016-1-14 08:38:36 | 显示全部楼层
先将文件名中的数字统一在其左边补0到一指定的最大位数,(比如5位:1-10.txt 补0后 00001-00010.txt)
再 ...
afan 发表于 2016-1-13 10:12


嘿,好办法,
从其它角度来看。
我试试。
发表于 2016-1-17 17:12:03 | 显示全部楼层
有这么复杂么,如果你这些文件都在同一个目录下,用_FileListToArray获取所有文件名到数组,不在同一个目录下用你目前的方法获取所有文件到数组。数组获取完毕后,自己根据需求写一套排序规则不就行了?
 楼主| 发表于 2016-1-18 08:19:52 | 显示全部楼层
回复 14# skyfree
获取到的文件名不同,有1-1.txt,也有1-01.txt等等。
最后找网友写了个批处理,搞定了。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 11:58 , Processed in 0.112184 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表