【已解决】如何操作同一名称数组, 内容完全不同的问题, 谢谢!!!
本帖最后由 131738 于 2013-11-3 14:04 编辑For $i = 1 To 5 ; 主循环
Switch $i
Case 1
$Path = (@ScriptDir & "\Dir1\")
Case 2
$Path = (@ScriptDir & "\Dir2\")
Case 3
$Path = (@ScriptDir & "\Dir3\")
Case 4
$Path = (@ScriptDir & "\Dir4\")
Case 5
$Path = (@ScriptDir & "\Dir5\")
EndSwitch
_FileToArray();读文件名到数组
_Operate();操作文件名数组
Next
Func _FileToArray()
...
...
Return $File_Array;根据 For 循环, 返回不同内容的数组
EndFunc
Func _Operate();操作文件名数组
...
...
;操作完成后, 循环删除数组元素, 清空当前数组
For $i = 0 To UBound($File_Array) - 1
_ArrayDelete($File_Array, 0);依次删除数组 0 元素,直到最后清空数组
Next
DirRemove ( $Path );删除已处理的文件夹
EndFunc问题:
实际运行这个脚本, _Operate() 能顺利完成主循环 Case 1 传递的内容,
但当执行 Case 2 时, _Operate() 发生错误退出脚本, 提示数组索引错误,
测试检查,发现这时 _FileToArray() 返回的 $File_Array 前面元素为 Case 1 传递文件夹 Dir1 的内容,
后面才是 Case 2 传递文件夹 Dir2 的内容, 由于执行 Case 1 的最后已删除文件夹 Dir1,
到执行第二次 _Operate() 执行时, 没有了文件夹 Dir1 的文件, 使得 _Operate() 操作失败!
请问是否内存残留的原因, 是或不是, 应如果处理? 谢谢!!! 清空数组 给数组变量赋值为0就行了
如28-30行改为 $File_Array = 0 回复 1# 131738
帮前辈简化一丁点代码。认为直接以 ByRef 传递原始数组,就一定不会出错了。For $i = 1 To 5 ; 主循环
$Path = @ScriptDir & "\Dir" & $i & "\"
_Operate(_FileToArray($Path));操作文件名数组
Next
Func _FileToArray($sPath) ;读文件名到数组
;...
;...
Return $File_Array;根据 For 循环, 返回不同内容的数组
EndFunc
Func _Operate(ByRef $aArray);操作文件名数组
;...
;...
;操作完成后, 循环删除数组元素, 清空当前数组
$aArray = 0
DirRemove ( $Path );删除已处理的文件夹
EndFunc 回复131738
帮前辈简化一丁点代码。认为直接以 ByRef 传递原始数组,就一定不会出错了。
user3000 发表于 2013-11-2 19:35 http://www.autoitx.com/images/common/back.gif
【 $aArray = 0 】这个试过了的, 不行.... 【 $aArray = 0 】这个试过了的, 不行....
131738 发表于 2013-11-2 19:49 http://www.autoitx.com/images/common/back.gif
那肯定是别的地方出错了,由于代码不全,不好分析。$File_Array 是否为全局变量、或者是否使用的ByRef方式赋值都不清楚。 那肯定是别的地方出错了,由于代码不全,不好分析。$File_Array 是否为全局变量、或者是否使用的 ...
afan 发表于 2013-11-2 19:58 http://www.autoitx.com/images/common/back.gif
全局变量是肯定的,倒是 ByRef 赋值数组这个不知如何定义. 回复 6# 131738
简单说,一个文件夹有 2900 多文件,分包到若干个文件夹,就为加快处理速度. 回复 7# 131738
同一个脚本,分若干次单独执行没有问题的,想一次处理所有文件夹就出问题.... 回复131738
同一个脚本,分若干次单独执行没有问题的,想一次处理所有文件夹就出问题....
131738 发表于 2013-11-2 20:42 http://www.autoitx.com/images/common/back.gif
估计是前辈的_FileToArray()有问题 估计是前辈的_FileToArray()有问题
afan 发表于 2013-11-2 20:49 http://www.autoitx.com/images/common/back.gif
我再看看... 我再看看...
131738 发表于 2013-11-2 20:58 http://www.autoitx.com/images/common/back.gif
莫非 _FileToArray() 里面是用的 _ArrayAdd 方式?那样既慢且可能会出现一楼的错误 莫非 _FileToArray() 里面是用的 _ArrayAdd 方式?那样既慢且可能会出现一楼的错误
afan 发表于 2013-11-2 23:32 http://www.autoitx.com/images/common/back.gif
没有 _ArrayAdd
现在我该用 3.3.9.21 版的 _FileListToArray , 仍然是一样的问题..... 回复 12# 131738
看来这样猜是难以猜到的。在一楼14行前插入一行清零试试 $File_Array = 0 回复131738
看来这样猜是难以猜到的。在一楼14行前插入一行清零试试 $File_Array = 0
afan 发表于 2013-11-3 00:59 http://www.autoitx.com/images/common/back.gif
谢谢你凌晨时间还在思考这个问题!!!
问题找到了,原来一个计数的变量在第一次循环后没有归 0 , 导致以后的计数出现差异.....
实在太可笑了,这莫个低级幼稚的错误使得你为我费心思考,抱歉了, 再次谢谢!!!
页:
[1]