如何让自定义函数执行的结果赋值给函数名?
在使用自定义函数的时候,有些函数是在函数名那里设置一下变量,然后就可以从函数名那里得到运行结果。虽然用得不少,但是我今天用我写的这个自定义函数,就用懵了。Local $sFiles
_Filelist("C:\app")
Func _Filelist($SearchDir)
$Search = FileFindFirstFile($SearchDir & "\*.*")
If $Search = -1 Then Return -1
While 1
$File = FileFindNextFile($Search)
If @error Then
FileClose($Search)
Return
ElseIf $file = "." Or $file = ".." Then
ContinueLoop
Else
_Filelist($SearchDir & "\" & $File)
EndIf
If $File = "TEMP01.DBF" Then
$sFiles = $SearchDir & "\" & $File
EndIf
WEnd
EndFunc ;==>_Filelist
函数运行最后的结果是存储在$sFiles里面的,而我却用$a = _Filelist("C:\app")来接收运行结果,可想而知,只能得到0.想请教大家,怎么修改,可以这样接收函数运行结果呢?谢谢!
$c=_Filelist("C:\app")
msgbox(0,"",$c)
Func _Filelist($SearchDir)
$Search = FileFindFirstFile($SearchDir & "\*.*")
If $Search = -1 Then Return -1
While 1
$File = FileFindNextFile($Search)
If @error Then
FileClose($Search)
Return
ElseIf $file = "." Or $file = ".." Then
ContinueLoop
Else
_Filelist($SearchDir & "\" & $File)
EndIf
If $File = "TEMP01.DBF" Then
$sFiles = $SearchDir & "\" & $File
return $sFiles
EndIf
WEnd
EndFunc ;==>_Filelist
{:face (411):}
LZ,你在程序主体中定义$sFiles为Local变量,但它在你的函数里是另一个local变量,而函数没有指定返回值,你这样运行当然得不到结果,正常的写法是二楼G大的代码,当然你也可以不走寻常路,在程序主体中定义$sFiles为Global变量,这时,只要执行_Filelist("C:\app"),$sFiles变量就会取到值(此法不推荐,返回值才是正道)。 回复 2# gto250
G大,我测试了一下你修改后的代码,返回值是0。 里面有递归,不能仅使用单次返回的结果 回复 5# afan
A大,我尝试修改了,还是得到不结果,请教了。 你这从头到尾只会找一个文件吗? $sFiles = $SearchDir & "\" & $File
如果有多个不同路径的同文件名,应该用 &= 连接所有
gto250 发表于 2014-2-11 20:29 http://www.autoitx.com/images/common/back.gif
漂亮的代码,值得学习。 回复 7# afan
这个函数,可以搜索出多个文件的,只要文件名等于if条件里的,都被搜索出来。如果不设置if条件,则可以搜索整个给定路径下的所有文件。 回复 9# smooth
我说过了,你这个只能搜出一个文件,详见7# 本帖最后由 gto250 于 2014-2-12 21:38 编辑
$d=findfile("C:\app")
MsgBox(0,"",$d)
Func findfile($Dir)
Local $sFiles
_Filelist($Dir,$sFiles)
Return $sFiles
EndFunc
Func _Filelist($SearchDir,ByRef $sFiles)
$Search = FileFindFirstFile($SearchDir & "\*.*")
If $Search = -1 Then Return -1
While 1
$File = FileFindNextFile($Search)
If @error Then
FileClose($Search)
Return
ElseIf $file = "." Or $file = ".." Then
ContinueLoop
Else
_Filelist($SearchDir & "\" & $File,$sFiles)
EndIf
If $File = "pcv.ini" Then
$sFiles = $SearchDir & "\" & $File
EndIf
WEnd
EndFunc ;==>_Filelist
用个折中的办法吧 回复 10# afan
你说的是对的。我忘记我把&符号删掉了,因为我现在要查找的文件,就只有一个文件,所以我觉得就没有必要再加个&了,加个&的话,后面还要价格@CRLF,这样就带了空白符,用起来麻烦。谢谢提醒!
页:
[1]