找回密码
 加入
搜索
查看: 4862|回复: 13

[AU3基础] 【已解决】如何操作同一名称数组, 内容完全不同的问题, 谢谢!!!

  [复制链接]
发表于 2013-11-2 17:18:20 | 显示全部楼层 |阅读模式
本帖最后由 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() 操作失败!

请问是否内存残留的原因, 是或不是, 应如果处理? 谢谢!!!
发表于 2013-11-2 19:07:14 | 显示全部楼层
清空数组 给数组变量赋值为0就行了
如28-30行改为 $File_Array = 0
发表于 2013-11-2 19:35:44 | 显示全部楼层
回复 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
 楼主| 发表于 2013-11-2 19:49:57 | 显示全部楼层
回复  131738

帮前辈简化一丁点代码。认为直接以 ByRef 传递原始数组,就一定不会出错了。
user3000 发表于 2013-11-2 19:35


【 $aArray = 0 】这个试过了的, 不行....
发表于 2013-11-2 19:58:52 | 显示全部楼层
【 $aArray = 0 】这个试过了的, 不行....
131738 发表于 2013-11-2 19:49



    那肯定是别的地方出错了,由于代码不全,不好分析。$File_Array 是否为全局变量、或者是否使用的ByRef方式赋值都不清楚。
 楼主| 发表于 2013-11-2 20:36:03 | 显示全部楼层
那肯定是别的地方出错了,由于代码不全,不好分析。$File_Array 是否为全局变量、或者是否使用的 ...
afan 发表于 2013-11-2 19:58


全局变量是肯定的,倒是 ByRef 赋值数组这个不知如何定义.
 楼主| 发表于 2013-11-2 20:39:33 | 显示全部楼层
回复 6# 131738

简单说,一个文件夹有 2900 多文件,分包到若干个文件夹,就为加快处理速度.
 楼主| 发表于 2013-11-2 20:42:22 | 显示全部楼层
回复 7# 131738

同一个脚本,分若干次单独执行没有问题的,想一次处理所有文件夹就出问题....
发表于 2013-11-2 20:49:21 | 显示全部楼层
回复  131738

同一个脚本,分若干次单独执行没有问题的,想一次处理所有文件夹就出问题....
131738 发表于 2013-11-2 20:42



    估计是前辈的_FileToArray()有问题
 楼主| 发表于 2013-11-2 20:58:15 | 显示全部楼层
估计是前辈的_FileToArray()有问题
afan 发表于 2013-11-2 20:49


我再看看...
发表于 2013-11-2 23:32:29 | 显示全部楼层
我再看看...
131738 发表于 2013-11-2 20:58



    莫非 _FileToArray() 里面是用的 _ArrayAdd 方式?那样既慢且可能会出现一楼的错误
 楼主| 发表于 2013-11-3 00:26:00 | 显示全部楼层
莫非 _FileToArray() 里面是用的 _ArrayAdd 方式?那样既慢且可能会出现一楼的错误
afan 发表于 2013-11-2 23:32


没有 _ArrayAdd  
现在我该用 3.3.9.21 版的 _FileListToArray , 仍然是一样的问题.....
发表于 2013-11-3 00:59:18 | 显示全部楼层
回复 12# 131738


    看来这样猜是难以猜到的。在一楼14行前插入一行清零试试 $File_Array = 0
 楼主| 发表于 2013-11-3 14:03:19 | 显示全部楼层
回复  131738


    看来这样猜是难以猜到的。在一楼14行前插入一行清零试试 $File_Array = 0
afan 发表于 2013-11-3 00:59


谢谢你凌晨时间还在思考这个问题!!!
问题找到了,原来一个计数的变量在第一次循环后没有归 0 , 导致以后的计数出现差异.....
实在太可笑了,这莫个低级幼稚的错误使得你为我费心思考,抱歉了, 再次谢谢!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 19:28 , Processed in 0.092830 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表