[已解决]关于_FileListToArray通配符的问题
本帖最后由 fuinei 于 2012-9-18 16:30 编辑各位好,AU3的帮忙文件中缺少关于_FileListToArray通配符的内容,百度了一下通配符可使用*表示1个或多个字符,?表示一个任意字符,我有一个疑问题能否通过_FileListToArray列出指定路径下不含特定关键字的文件或文件夹呢?
#include <Array.au3>
#include <File.au3>
Local $Folder = @ScriptDir & "\Test\"
$List = _FileListToArray($Folder,"*.jpg",1)
If $List = 0 Then
MsgBox(48,"Error","没有找到指定路径或指定的路径中没有jpg文件")
Else
_ArrayDisplay($List)
EndIf
如上述的代码可返回所有jpg文件的列表,请问如何修改可返回不为jpg文件的列表呢? $List = _FileListToArray($Folder,"*.*",1)
通配符‘*’ 所有的文件 回复 1# fuinei
搜索udf区afan的帖子 直接纯_FileListToArray是没办法的
先用_FileListToArray列出所有文件,然后正则匹配凡是.jpg后缀的从数组中删除
得到的就是你想要的了 回复 1# fuinei #include <Array.au3>
#include <File.au3>
Local $Folder = 'D:\MyDoc\MyPic'
$List = _FileListToArray($Folder,"*.*",1)
If $List = 0 Then
MsgBox(48,"Error","没有找到指定路径或指定的路径中没有文件")
Else
For $i=0 To UBound($List)-1
While StringRegExp($List[$i],'.*jpg\b')
_ArrayDelete($List,$i)
WEnd
If $i==UBound($List)-1 Then ExitLoop
Next
_ArrayDisplay($List)
EndIf 回复 5# love5173
使用该代码我运行时有报错,无法返回结果 回复 6# fuinei
如果文件夹内全都是jpg文件的话 会报错,因为根本就没有数组存在
你看看是不是这个原因 因为我在我机器上跑过 正常情况下是可以的 回复 7# love5173
报错信息如下:
"F:\Pic\test.au3" (12) : ==> ???????????????????.:
WEnd
WEnd^ ERROR
需查找的文件夹中有除jpg以外的1个txt文件,真奇怪~~~ 回复 8# fuinei
完善了一下 你试试#include <Array.au3>
#include <File.au3>
Local $Folder = 'D:\UserFile\Desktop\9898'
$List = _FileListToArray($Folder,"*.*",1)
_ArrayDisplay($List)
If $List = 0 Then
MsgBox(48,"Error","没有找到指定路径或指定的路径中没有文件")
Else
For $i=0 To UBound($List)-1
While StringRegExp($List[$i],'.*jpg\b')
_ArrayDelete($List,$i)
_ArrayDisplay($List)
MsgBox(0,$i,UBound($List)-1)
If $i>=UBound($List) Then ExitLoop 2
WEnd
If $i>=UBound($List) Then ExitLoop
Next
_ArrayDisplay($List)
EndIf 本帖最后由 love5173 于 2012-9-17 11:33 编辑
错误的原因是数组元素个数变少导致while的时候调用了超出数组的元素,里面的很多语句是为了检测哪里出错才写的,实际用的话可以去掉就行 回复 10# love5173
测试成功,谢谢指导! 回复 3# netegg
请问netgee元老指的是 _StringREReplace_Order()吗? 本帖最后由 netegg 于 2012-9-17 18:46 编辑
http://www.autoitx.com/thread-11801-1-2.html
不过需要自己修改下原型
#include <file.au3>
#include <array.au3>
dim $aA = _filelisttoarray(@systemdir, '*.*')
$sA = _arraytostring($aA, @crlf)
$sA = _FileSRER2Line($sA, '.exe', '')
msgbox(0,0,$sA)
;==========================================================================================
; 说明: 按指定的关键字替换或删除文本行,可选择是否使用正则表达式,是否写新文件等。
; 语法: _FileSRER2Line('文件路径'[, '搜索字符'[, '替换'[, 匹配标志[, 正则标志[, 回车符[, 写入标志]]]]]])
; 参数: 可选参数:如'搜索字符'字符为空(默认)则删除所有空行。
; 可选参数:如'替换'字符为空(默认)则删除匹配行,且不会留下空行。
; 可选参数:匹配标志 = 1 :整行需完全匹配(默认);匹配标志 = 0 :行中只需包含关键字。
; 可选参数:使用正则标志 = 1 使用正则(默认),为 0 不使用正则,使用原始字符串匹配。
; 可选参数:回车符标志 = 1 仅识别有回车符的断行@CRLF(默认,速度快),为 0 只要有换行符@LF即识别为断行。
; 可选参数:写入标志 = '' 写入原文件(默认);不为空则写入指定文件;= 0 仅返回不写入。
; 注意: 本函数以行作为操作单位,即不管在一行中含有几处关键字均按一个替换单位操作。
; 返回值:返回替换后的字符串。替换次数保存在@extended宏中。
; 作者: Afan -- http://www.autoitx.com
;=====================================================================================start
Func _FileSRER2Line($sFile, $pattern = '', $replace = '', $flag = 1, $SRE = 1, $CR = 1, $Write = '')
Local $strqhz = '', $extended = 0, $sRER, $strZY, $CRF = ''
If $CR = 0 Then $CRF = '?'
If $pattern = '' Then
$sRER = StringRegExpReplace(@CRLF & $sFile, '\r' & $CRF & '\n(?=\r' & $CRF & '\n)|\r' & $CRF & '\n$', '')
Else
If $SRE = 0 Then
$strZY = '(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)'
$pattern = StringRegExpReplace($pattern, $strZY, '\\$1')
$replace = StringRegExpReplace($replace, $strZY, '\\$1')
EndIf
If $flag = 0 Then $strqhz = '\V*'
Local $patternWZ = $strqhz & $pattern & $strqhz
$pattern = '(\r' & $CRF & '\n)' & $patternWZ & '(?=\r' & $CRF & '\n)|\r' & $CRF & '\n' & $patternWZ & '$'
If $replace <> '' Then
$sRER = StringRegExpReplace(@CRLF & $sFile, $pattern, '${1}' & $replace)
Else
$sRER = StringRegExpReplace(@CRLF & $sFile, $pattern, '')
EndIf
EndIf
$extended = $extended + @extended
$sRER = StringRegExpReplace($sRER, '^\r' & $CRF & '\n', '')
SetExtended($extended)
Return $sRER
EndFunc ;==>_FileSRER2Line 回复 13# netegg
谢谢指导,函数中还是用到了正则,一定要慢慢学习一下正则
页:
[1]