smooth 发表于 2014-2-11 18:05:16

如何让自定义函数执行的结果赋值给函数名?

在使用自定义函数的时候,有些函数是在函数名那里设置一下变量,然后就可以从函数名那里得到运行结果。虽然用得不少,但是我今天用我写的这个自定义函数,就用懵了。

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.想请教大家,怎么修改,可以这样接收函数运行结果呢?谢谢!

gto250 发表于 2014-2-11 20:29:41



$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

palkiller 发表于 2014-2-11 21:54:09

{:face (411):}
LZ,你在程序主体中定义$sFiles为Local变量,但它在你的函数里是另一个local变量,而函数没有指定返回值,你这样运行当然得不到结果,正常的写法是二楼G大的代码,当然你也可以不走寻常路,在程序主体中定义$sFiles为Global变量,这时,只要执行_Filelist("C:\app"),$sFiles变量就会取到值(此法不推荐,返回值才是正道)。

smooth 发表于 2014-2-11 23:35:29

回复 2# gto250
G大,我测试了一下你修改后的代码,返回值是0。

afan 发表于 2014-2-11 23:45:31

里面有递归,不能仅使用单次返回的结果

smooth 发表于 2014-2-12 10:58:14

回复 5# afan

A大,我尝试修改了,还是得到不结果,请教了。

afan 发表于 2014-2-12 11:25:21

你这从头到尾只会找一个文件吗? $sFiles = $SearchDir & "\" & $File
如果有多个不同路径的同文件名,应该用 &= 连接所有

凌菡 发表于 2014-2-12 14:09:00


gto250 发表于 2014-2-11 20:29 http://www.autoitx.com/images/common/back.gif


    漂亮的代码,值得学习。

smooth 发表于 2014-2-12 16:41:26

回复 7# afan

这个函数,可以搜索出多个文件的,只要文件名等于if条件里的,都被搜索出来。如果不设置if条件,则可以搜索整个给定路径下的所有文件。

afan 发表于 2014-2-12 17:12:30

回复 9# smooth


    我说过了,你这个只能搜出一个文件,详见7#

gto250 发表于 2014-2-12 21:31:32

本帖最后由 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


用个折中的办法吧

smooth 发表于 2014-2-12 23:50:54

回复 10# afan

你说的是对的。我忘记我把&符号删掉了,因为我现在要查找的文件,就只有一个文件,所以我觉得就没有必要再加个&了,加个&的话,后面还要价格@CRLF,这样就带了空白符,用起来麻烦。谢谢提醒!
页: [1]
查看完整版本: 如何让自定义函数执行的结果赋值给函数名?