找回密码
 加入
搜索
查看: 10752|回复: 16

[AU3基础] 奇怪的简单数组问题,求教

  [复制链接]
发表于 2014-9-22 12:28:02 | 显示全部楼层 |阅读模式
大家好,本人菜鸟。代码很简单如下,
$File_Name_Array = StringSplit($Get_Parent_ID, '|',1)
$Config_Name = $File_Name_Array[2]
  _ArrayDisplay($File_Name_Array, "id")

在编译的时候出错
"D:\autoit3_script_lenovo\monitor\Monitor Koda design.au3" (202) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$Config_Name = $File_Name_Array[2]
$Config_Name = ^ ERROR
但是去掉 $Config_Name = $File_Name_Array[2] 这样以后,数组时能显示的。内容如下。
Row|Col 0
[0]|2
[1]|Tornado
[2]|config7

请问一下大家,怎么 $Config_Name = $File_Name_Array[2] 这一行在编辑的时候会报出错误来呢?
如果用  $File_Name_Array[1] 这个是有值的“Tornado”. 一直感觉很奇怪, 我任意应该返回config7才对的呀,但是编译的时候就出错了
谢谢大家
 楼主| 发表于 2014-9-22 12:29:24 | 显示全部楼层
之前我有一个
                                 $ComputerName_IP = StringSplit($aArray[$i], '_', 2)
                              $MachinesArray[$i]=$ComputerName_IP[0]          ;save Machines Name
                                  $ConfigArray[$i]=$ComputerName_IP[1]            ;save Config Name
类似语句,没有问题。stringsplit 后面的参数为1.或2 都OK.
但是提问的问题就不行了。
 楼主| 发表于 2014-9-22 13:50:49 | 显示全部楼层
顶一个,坐等。。谢谢
发表于 2014-9-22 17:28:54 | 显示全部楼层
测试没有问题。看来是你的版本问题吧。
发表于 2014-9-22 18:02:58 | 显示全部楼层
回复 1# hmcmmmmm
$Config_Name = $File_Name_Array[2]
数组变量有正确数量的下标或下标尺寸超出范围。你改成$Config_Name = $File_Name_Array[3]  试试呢?
发表于 2014-9-22 18:04:19 | 显示全部楼层
Row|Col 0
[0]|2
[1]|Tornado
[2]|config7
你第一个是显示的数组的个数的嘛,好生再把数组这一章再学一下。。重新多编点数组学习学习。
发表于 2014-9-22 18:11:03 | 显示全部楼层
你用_Arraydisplay 都显示出数组了。就像在电子表格中一格一格的显示一样的撒。A[0]=2
A[1]=TORNADO A[2]=config7    数组是三行,循环时一般FOR i =1 TO UBound(array[2]-1),
所以你这句就超标  $Config_Name = $File_Name_Array[2]
你肯定以为A[0]=tornado  a[1]=config7  这时当I=0时就如你所愿
发表于 2014-9-22 18:45:20 | 显示全部楼层
回复 1# hmcmmmmm
可以忽视此错误,继续运行程序就是。
但每次使用数组时,要作判断。这是个好习惯。
If UBound($File_Name_Array) = 3 Then $Config_Name = $File_Name_Array[2]
 楼主| 发表于 2014-9-25 09:37:38 | 显示全部楼层
回复 8# user3000

感谢,慢慢培养
 楼主| 发表于 2014-9-25 09:38:30 | 显示全部楼层
回复 7# dunphy


    谢谢,还是不太明白。我用了另外一个方法跳过了这个。
发表于 2014-9-28 13:43:28 | 显示全部楼层
本帖最后由 dunphy 于 2014-9-28 13:58 编辑

回复 10# hmcmmmmm

#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
#include <array.au3>

_Example1()

Func _Example1()
        
        Local $Get_Parent_ID = "Tornado|config7"
        Local $File_Name_Array = StringSplit($Get_Parent_ID, '|', 1) ;注意这里的标志的意思
        
        ;$STR_CHRSPLIT (0) = 分隔符字符串中的每个字符都将作为分隔标志 (默认值)
        ;$STR_ENTIRESPLIT (1) = 以整个分隔符字符串作为分隔标志
        ; $STR_NOCOUNT (2) = 禁用返回表示元素数量的第一个元素 - 方便使用基于 0 开始的数组.
        ;(此时的数组大小由 UBound() 函数检测).
        ;常量定义在 StringConstants.au3
        
        ;返回一个数组, 第一个元素 ($aArray[0]) 保存拆分后的子串数量,
        ;其余元素 ($aArray[1],$aArray[2] 等等) 则保存拆分后的每个子字符串.
        ;如果标志 = 2, 则返回第一元素不表示子串数量
                        
        $Config_Name = $File_Name_Array[2]     ;这里相当于又创建了个数组。   ;在我的WIN7专业版 3.3.12.0下执行无错        但调试第二句不显示??                                                                 
        _ArrayDisplay($File_Name_Array, "例1File_Name")  ;显示出来的数组有三个元素,第一个是数组的个数,第二个元素是TOrnado,第三个元素是config7        
        _ArrayDisplay($Config_Name, "例1id") ;看到没有,这里调试不显示。。。。问题就在 $Config_Name = $File_Name_Array[2] 这种赋值方式书写很不规范。        
EndFunc   ;==>_Example1


;;=======================对比示例
_Example2()

Func _Example2()
        Local $Get_Parent_ID = "Tornado|config7"
        Local $File_Name_Array = StringSplit($Get_Parent_ID, '|', 1) 
        _ArrayDisplay($File_Name_Array, "例2File_Name")
        Local $Config_Name[5]                                     ;创建数组 并多创建二个元素,让你看得更仔细
        $Config_Name[0] = $File_Name_Array[0]         ;  $Config_Name第一个元素被赋值为$File_Name_Array[0]即原数组的个数,,
        $Config_Name[1] = $File_Name_Array[1]         ;第二个元素赋值TOrnado
        $Config_Name[2] = $File_Name_Array[2]         ;第三个元素赋值config7
;;        $Config_Name[3] = $File_Name_Array[3]         ;如果你把这个加上肯定会出错

;;;;;因为原数组中只有三个元素,即 $File_Name_Array[0], $File_Name_Array[1], $File_Name_Array[2]
;; 少一个不会错,能少不能多。。。。
;;这样数组的下标才不会越界...

;;这里说明一下,你可以随意把你想要的值赋到数组的任一行。这样就能如你所愿,让$File_Name_Array[2]的值 config7赋给新数组$Config_Name[1]
;;        $Config_Name[0] = $File_Name_Array[1]   
;;     $Config_Name[1] = $File_Name_Array[2]  

       _ArrayDisplay($Config_Name, "例2ID")
EndFunc   ;==>_Example2
发表于 2014-10-2 21:56:15 | 显示全部楼层
为什么好多人都喜欢用这么复杂的变量名
发表于 2014-10-4 03:47:21 | 显示全部楼层
代码里有几百个变量的时候,变量名太简单了自己都会搞晕的。
发表于 2014-10-4 16:15:25 | 显示全部楼层
本帖最后由 netegg 于 2014-10-4 16:17 编辑

回复 13# sunafter
复杂了就不晕了吗?什么逻辑?代码短还好说,如果几万行的代码,你知道定义没定义过?
发表于 2014-10-4 20:03:25 | 显示全部楼层
本帖最后由 tvzml 于 2014-10-4 20:10 编辑
大家好,本人菜鸟。代码很简单如下,
$File_Name_Array = StringSplit($Get_Parent_ID, '|',1)
$Config_ ...
hmcmmmmm 发表于 2014-9-22 12:28


习惯加个容错判断啊,压迫避免数组错误,建议加判断


$File_Name_Array = StringSplit($Get_Parent_ID, '|', 1)
If IsArray($File_Name_Array) Then ;判断是否数组
        If UBound($File_Name_Array) > 2 Then ;判断数组大小
                $Config_Name = $File_Name_Array[2]
        EndIf
        _ArrayDisplay($File_Name_Array, "id")
EndIf
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-26 12:39 , Processed in 0.084051 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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