奇怪的简单数组问题,求教
大家好,本人菜鸟。代码很简单如下,$File_Name_Array = StringSplit($Get_Parent_ID, '|',1)
$Config_Name = $File_Name_Array
_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
$Config_Name = ^ ERROR
但是去掉 $Config_Name = $File_Name_Array 这样以后,数组时能显示的。内容如下。
Row|Col 0
|2
|Tornado
|config7
请问一下大家,怎么 $Config_Name = $File_Name_Array 这一行在编辑的时候会报出错误来呢?
如果用$File_Name_Array 这个是有值的“Tornado”. 一直感觉很奇怪, 我任意应该返回config7才对的呀,但是编译的时候就出错了
谢谢大家 之前我有一个
$ComputerName_IP = StringSplit($aArray[$i], '_', 2)
$MachinesArray[$i]=$ComputerName_IP ;save Machines Name
$ConfigArray[$i]=$ComputerName_IP ;save Config Name
类似语句,没有问题。stringsplit 后面的参数为1.或2 都OK.
但是提问的问题就不行了。 顶一个,坐等。。谢谢 测试没有问题。看来是你的版本问题吧。 回复 1# hmcmmmmm $Config_Name = $File_Name_Array数组变量有正确数量的下标或下标尺寸超出范围。你改成$Config_Name = $File_Name_Array试试呢? Row|Col 0
|2
|Tornado
|config7
你第一个是显示的数组的个数的嘛,好生再把数组这一章再学一下。。重新多编点数组学习学习。 你用_Arraydisplay 都显示出数组了。就像在电子表格中一格一格的显示一样的撒。A=2
A=TORNADO A=config7 数组是三行,循环时一般FOR i =1 TO UBound(array-1),
所以你这句就超标$Config_Name = $File_Name_Array
你肯定以为A=tornadoa=config7这时当I=0时就如你所愿 回复 1# hmcmmmmm
可以忽视此错误,继续运行程序就是。
但每次使用数组时,要作判断。这是个好习惯。If UBound($File_Name_Array) = 3 Then $Config_Name = $File_Name_Array 回复 8# user3000
感谢,慢慢培养 回复 7# dunphy
谢谢,还是不太明白。我用了另外一个方法跳过了这个。 本帖最后由 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) 保存拆分后的子串数量,
;其余元素 ($aArray,$aArray 等等) 则保存拆分后的每个子字符串.
;如果标志 = 2, 则返回第一元素不表示子串数量
$Config_Name = $File_Name_Array ;这里相当于又创建了个数组。 ;在我的WIN7专业版 3.3.12.0下执行无错 但调试第二句不显示??
_ArrayDisplay($File_Name_Array, "例1File_Name");显示出来的数组有三个元素,第一个是数组的个数,第二个元素是TOrnado,第三个元素是config7
_ArrayDisplay($Config_Name, "例1id") ;看到没有,这里调试不显示。。。。问题就在 $Config_Name = $File_Name_Array 这种赋值方式书写很不规范。
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 ;创建数组 并多创建二个元素,让你看得更仔细
$Config_Name = $File_Name_Array ;$Config_Name第一个元素被赋值为$File_Name_Array即原数组的个数,,
$Config_Name = $File_Name_Array ;第二个元素赋值TOrnado
$Config_Name = $File_Name_Array ;第三个元素赋值config7
;; $Config_Name = $File_Name_Array ;如果你把这个加上肯定会出错
;;;;;因为原数组中只有三个元素,即 $File_Name_Array, $File_Name_Array, $File_Name_Array
;; 少一个不会错,能少不能多。。。。
;;这样数组的下标才不会越界...
;;这里说明一下,你可以随意把你想要的值赋到数组的任一行。这样就能如你所愿,让$File_Name_Array的值 config7赋给新数组$Config_Name
;; $Config_Name = $File_Name_Array
;; $Config_Name = $File_Name_Array
_ArrayDisplay($Config_Name, "例2ID")
EndFunc ;==>_Example2
为什么好多人都喜欢用这么复杂的变量名 代码里有几百个变量的时候,变量名太简单了自己都会搞晕的。 本帖最后由 netegg 于 2014-10-4 16:17 编辑
回复 13# sunafter
复杂了就不晕了吗?什么逻辑?代码短还好说,如果几万行的代码,你知道定义没定义过? 本帖最后由 tvzml 于 2014-10-4 20:10 编辑
大家好,本人菜鸟。代码很简单如下,
$File_Name_Array = StringSplit($Get_Parent_ID, '|',1)
$Config_ ...
hmcmmmmm 发表于 2014-9-22 12:28 http://www.autoitx.com/images/common/back.gif
习惯加个容错判断啊,压迫避免数组错误,建议加判断
$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
EndIf
_ArrayDisplay($File_Name_Array, "id")
EndIf
页:
[1]
2