jchang 发表于 2009-12-16 21:50:10

如何自定义函数使之输出为数组

本帖最后由 jchang 于 2009-12-17 21:11 编辑

由于如下类似的脚本要经常写:
$fileCICW=FileOpen(@ScriptDir&"\CICW.txt", 0)
If $fileCICW = -1 Then
    MsgBox(0, "Error", "Unable to open CICW.TXT.")
    Exit
EndIf
While 1
    $lineCICW = FileReadLine($fileCICW)
    If @error = -1 Then ExitLoop
        $arrayCICW=StringSplit($lineCICW,"=")
    FileWrite(@ScriptDir&"\CICW1.txt", $arrayCICW & @CRLF)
    FileWrite(@ScriptDir&"\CICW2.txt", $arrayCICW & @CRLF)
Wend
Dim $avArrayCICW1,$avArrayCICW2
_FileReadToArray ( @ScriptDir&"\CICW1.txt", $avArrayCICW1 )
_FileReadToArray ( @ScriptDir&"\CICW2.txt", $avArrayCICW2 )
FileDelete(@ScriptDir&"\CICW1.txt")
FileDelete(@ScriptDir&"\CICW2.txt")

以上脚本只与打开的文本CICW.txt有关,目的是想生成两个数组,$avArrayCICW1,$avArrayCICW2

想写一个函数实现以上的功能:
FuncSTR($A,$B1,$B2)
        $fileA=FileOpen(@ScriptDir&"\"&$A, 0)
    If $fileA = -1 Then
    MsgBox(0, "Error", "Unable to open "$A)
    Exit
EndIf
While 1
    $lineA= FileReadLine($fileA)
    If @error = -1 Then ExitLoop
        $arrayA=StringSplit($lineA,"=")
    FileWrite(@ScriptDir&"\A1.txt", $arrayA & @CRLF)
    FileWrite(@ScriptDir&"\A2.txt", $arrayA & @CRLF)
Wend
Dim $B1,$B2
_FileReadToArray ( @ScriptDir&"\BOP1.txt", $B1 )
_FileReadToArray ( @ScriptDir&"\BOP2.txt", $B2 )
FileDelete(@ScriptDir&"\A1.txt")
FileDelete(@ScriptDir&"\A2.txt")       
EndFunc

但是在用的过程中确出错了,请问我的函数是否写法有误,我用该函数的时候输入的是:
STR("CICW.txt",$avArrayCICW1,$avArrayCICW2)

jchang 发表于 2009-12-16 21:59:27

我觉得主要是我定义函数STR($A,$B1,$B2)的时候出的问题,不定义函数的脚本是可以正常运行的。

afan 发表于 2009-12-17 13:22:22

回复 3# jchang


    Dim $B1,$B2 写在函数外面

jchang 发表于 2009-12-17 14:42:16

回复 4# afan
按照楼上的方法把脚本修改成了如下的形式:

Dim $avArrayBOP1,$avArrayBOP2
STR("BOP.txt",$avArrayBOP1,$avArrayBOP2)

FuncSTR($A,$B1,$B2)
        $fileA=FileOpen(@ScriptDir&"\"&$A, 0)
    If $fileA = -1 Then
    MsgBox(0, "Error", "Unable to open "&$A)
    Exit
    EndIf
While 1
   $lineA= FileReadLine($fileA)
    If @error = -1 Then ExitLoop
        $arrayA=StringSplit($lineA,"=")
   FileWrite(@ScriptDir&"\A1.txt", $arrayA & @CRLF)
   FileWrite(@ScriptDir&"\A2.txt", $arrayA & @CRLF)
Wend
;Dim $B1,$B2
_FileReadToArray ( @ScriptDir&"\BOP1.txt", $B1 )
_FileReadToArray ( @ScriptDir&"\BOP2.txt", $B2 )

FileDelete(@ScriptDir&"\A1.txt")
FileDelete(@ScriptDir&"\A2.txt")
       
EndFunc

在运行后发现一闪就不见了,哪里还有问题呢?

afan 发表于 2009-12-17 20:33:54

Func STR($A, ByRef $B1, ByRef $B2)
        $fileA = FileOpen(@ScriptDir & "\" & $A, 0)
        If $fileA = -1 Then
                MsgBox(0, "Error", "Unable to open " $A)
                Exit
        EndIf
        While 1
                $lineA = FileReadLine($fileA)
                If @error = -1 Then ExitLoop
                $arrayA = StringSplit($lineA, "=")
                If @Error then ContinueLoop
                FileWrite(@ScriptDir & "\A1.txt", $arrayA & @CRLF)
                FileWrite(@ScriptDir & "\A2.txt", $arrayA & @CRLF)
        WEnd
        _FileReadToArray(@ScriptDir & "\A1.txt", $B1)
        _FileReadToArray(@ScriptDir & "\A2.txt", $B2)
        FileDelete(@ScriptDir & "\A1.txt")
        FileDelete(@ScriptDir & "\A2.txt")
EndFunc   ;==>STR

jchang 发表于 2009-12-17 21:11:05

正解,非常感谢

ncxj 发表于 2015-10-17 11:51:14

标记一下,先
页: [1]
查看完整版本: 如何自定义函数使之输出为数组