hmcmmmmm 发表于 2014-9-22 12:28:02

奇怪的简单数组问题,求教

大家好,本人菜鸟。代码很简单如下,
$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才对的呀,但是编译的时候就出错了
谢谢大家

hmcmmmmm 发表于 2014-9-22 12:29:24

之前我有一个
                               $ComputerName_IP = StringSplit($aArray[$i], '_', 2)
                              $MachinesArray[$i]=$ComputerName_IP          ;save Machines Name
                                  $ConfigArray[$i]=$ComputerName_IP            ;save Config Name
类似语句,没有问题。stringsplit 后面的参数为1.或2 都OK.
但是提问的问题就不行了。

hmcmmmmm 发表于 2014-9-22 13:50:49

顶一个,坐等。。谢谢

shqf 发表于 2014-9-22 17:28:54

测试没有问题。看来是你的版本问题吧。

dunphy 发表于 2014-9-22 18:02:58

回复 1# hmcmmmmm $Config_Name = $File_Name_Array数组变量有正确数量的下标或下标尺寸超出范围。你改成$Config_Name = $File_Name_Array试试呢?

dunphy 发表于 2014-9-22 18:04:19

Row|Col 0
|2
|Tornado
|config7
你第一个是显示的数组的个数的嘛,好生再把数组这一章再学一下。。重新多编点数组学习学习。

dunphy 发表于 2014-9-22 18:11:03

你用_Arraydisplay 都显示出数组了。就像在电子表格中一格一格的显示一样的撒。A=2
A=TORNADO A=config7    数组是三行,循环时一般FOR i =1 TO UBound(array-1),
所以你这句就超标$Config_Name = $File_Name_Array
你肯定以为A=tornadoa=config7这时当I=0时就如你所愿

user3000 发表于 2014-9-22 18:45:20

回复 1# hmcmmmmm
可以忽视此错误,继续运行程序就是。
但每次使用数组时,要作判断。这是个好习惯。If UBound($File_Name_Array) = 3 Then $Config_Name = $File_Name_Array

hmcmmmmm 发表于 2014-9-25 09:37:38

回复 8# user3000

感谢,慢慢培养

hmcmmmmm 发表于 2014-9-25 09:38:30

回复 7# dunphy


    谢谢,还是不太明白。我用了另外一个方法跳过了这个。

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) 保存拆分后的子串数量,
      ;其余元素 ($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-2 21:56:15

为什么好多人都喜欢用这么复杂的变量名

sunafter 发表于 2014-10-4 03:47:21

代码里有几百个变量的时候,变量名太简单了自己都会搞晕的。

netegg 发表于 2014-10-4 16:15:25

本帖最后由 netegg 于 2014-10-4 16:17 编辑

回复 13# sunafter
复杂了就不晕了吗?什么逻辑?代码短还好说,如果几万行的代码,你知道定义没定义过?

tvzml 发表于 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 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
查看完整版本: 奇怪的简单数组问题,求教