zzyzzyboy 发表于 2012-3-13 20:57:02

初级的数组使用方法~大家帮忙看一下

本帖最后由 zzyzzyboy 于 2012-3-13 21:00 编辑

代码如下:
Dim $arry[]

$arry=IniRead("1.txt","设置","随机数","10,20")
MsgBox(0,"第一个随机数为:",$arry1)
MsgBox(0,"第二个随机数为:",$arry1)

以下为1.TXT的内容
1.txt
[设置]
随机数=10,15


这样编译不过去,先谢谢了

水木子 发表于 2012-3-13 20:58:55

没看明白你的意思!

veket_linux 发表于 2012-3-13 21:00:42

IniRead 读的是ini配置文件 不是txt

veket_linux 发表于 2012-3-13 21:04:06

IniRead 不是用来读数组的

$arry=IniRead("1.txt","设置","随机数","10,20")
MsgBox(0,"第一个随机数为:",$arry)

1.ini
[设置]
随机数=10,15

msgbox将显示10,15

zzyzzyboy 发表于 2012-3-13 21:05:53

版主大哥,我的意思是这样的
我想从1.TXT里读取随机数10 和15 这两个值
然后用Random 随机获得 10--15这之间的一个值

魔导 发表于 2012-3-13 21:05:59

小弟不懂这个不过是数组的话楼主可以看看这个
再次声明一下 :这是A大的码   我也还有很多没看懂
;~ 此版修正   无单选就不换行
;~ 代码为   $sInfo &= @CRLF

;~ 8各TAB单页   
;~ 12个复选框   每个TAB单页中都有
;~ 12各复选框中有8个单选(一组)
;~ 选好后以TAB为以单位   读取读取的   框

#NoTrayIcon
Local $aTabItem = , $aCheckbox = [], $iTab = 1
;~ 声明 单页有【17】个= tab有【16】个 ,竖的【13】横的【17】=内【12】,iTAB=1
Local $aCkTxt = ['XD<上>', 'XD<下>', 'BT<上>', 'BT<下>', 'ND<上>', 'ND<下>', 'SL<上>', _
                'SL<下>', 'DF<上>', 'DF<下>', 'KN<上>', 'KN<下>']
;~                              声明有【12】个复选=【各复选框的名字和排序】
Local $aRdTxt = ['A1', 'A4', 'A7', 'D1', 'D8', 'E1', 'E2', 'NO']
;~ 声明有【8】个单选=【各个单选的名字和排序】
Local $hGui = GUICreate('老板专用>>>调控器', 800, 442)
;创建一个GUI窗口
GUISetBkColor(0xFFFFFF)
;设置空间颜色
Local $tab = GUICtrlCreateTab(0, 0, 800,370)
;在GUI 上创建一个TAB标签页
Local $Bt = GUICtrlCreateButton('读取', 500, 355, 80, 20)
;在GUI上创建一个按钮控件
For $i = 1 To 16
;~      声明 1到16(TAB)
      _CreateTab($i)
      Next
;~ 该函数(for 到 next) 创建GUI和其中的JS01到JS08 和TAB 中的单选 和复选 及读取 按钮
GUICtrlCreateTabItem('')
;在GUI上创建一个标签页控件项目
GUISetState()
;调整窗口的状态
While 1
      $msg = GUIGetMsg()
                ;捕获窗口消息
      Switch $msg
;~                      表达式   捕获窗口消息
                                                      Case -3
;~                                                            是 -3就
;~                                              (如果点击      控件里的小 ×   就)
                        Exit
;~                                    退出
                Case $tab
;~                                    是TAB 标签页 就
                        $iTab = GUICtrlRead($msg) + 1
                                                ;读取指定控件的状态或相关数据(捕获窗口消息)+1
;~                         WinSetTitle($hGui, '', '老板专用>>>调控器 - JS =>' & $iTab)
;~                                              修改指定窗口的标题(老板专用调控器,‘文本(没有)’,‘老板专用>>>调控器 - JS =>’&$iTab)
;~                         从$iTab得出老板专用>>>调控器 - JS => 1到 老板专用>>>调控器 - JS =>N
                Case $aCheckbox[$iTab] To $aCheckbox[$iTab]
;~                              是      $aCheckbox 【1】【读取指定控件的状态或相关数据(捕获窗口消息)+1】到$aCheckbox 【12】 【读取指定控件的状态或相关数据(捕获窗口消息)+1】
;~                                    所有tab 页上的   复选框(1到12)
                        If Not IsInt(($msg - $aCheckbox[$iTab]) / 9) Then ContinueLoop
;~                              如果   非整型数   ((捕获窗口消息 - 【1】【$Tab】/9)就 继续下一个循环(For)
                        Local $state = GUICtrlRead($msg)
;~                                              =读取指定控件的状态或相关数据(捕获窗口消息)
                        For $xx = 0 To 7
;~                                                      $xx = 0 到 7
                              GUICtrlSetState(Eval($msg & '_' & $xx), Round($state / 2) * 64)
;~                                    调整指定控件的状态(返回字符串形式的变量的值(捕获窗口消息)&'_'&0到7),
;~                        返回某数值精确到指定位的结果.(读取指定控件的状态或相关数据(捕获窗口消息)/2)*64)
                        Next
;~                                              结束 $xx = 0 到 7 循环
                Case $Bt
;~                                    是”读取“按钮就
                        Local $sInfo = ''
;~                                              =''
                        For $j = 1 To 12
;~                                                      1到12
                              If GUICtrlRead($aCheckbox[$j][$iTab]) <> 1 Then ContinueLoop
;~                                              如果            读取指定控件的状态或相关数据(复选框【1到12】【读取指定控件的状态或相关数据(捕获窗口消息)+1】)
;~                            是1   就      继续一个 While/Do/For 循环.
                                                                $sInfo &= $aCkTxt[$j - 1] & ' ===> '
;~                                                            =$aCkTxt[$j - 1](0到11)&‘===>’
                              For $xx = 0 To 7
;~                                                                      0到7
                                        If GUICtrlRead(Eval($aCheckbox[$j][$iTab] & '_' & $xx)) = 1 Then
;~                               如果   读取指定控件的状态或相关数据(返回字符串形式的变量的值(【1到12】【读取指定控件的状态或相关数据(捕获窗口消息)+1】))                  
;~                                                                      &'_'&0到7))=1
                                                                                                                $sInfo &= $aRdTxt[$xx]
;~                                                                                                就
;~                                                                                                   得出复选【单选】
                                        EndIf
;~                                                                              结束IF
                              Next
;~                                                            结束 0到7 循环
                              $sInfo &= @CRLF
;~                                                            $sInfo    以后使用时就换行
                        Next
;~                                              结束   1 到 12 循环
                        If $sInfo <> '' Then MsgBox(0, 'JS=>' & $iTab, $sInfo)
;~                                              如果是 '' 就显示对话框(0,'js 0'&读取指定控件的状态或相关数据(捕获窗口消息)+1,得出复选【单选】)
      EndSwitch
;~            结束表达式
WEnd

Func _CreateTab($X)
      $aTabItem[$x] = GUICtrlCreateTabItem('JS=>' & $x)
;~            =创建TAB名字为JS0+$X
;~ 此条只声明要创建以   JS0 为起的TABX未设定
      Local $j_x = 32, $j_y = 20, $j_Jy = 30
;~      声明   $j_x = 32, $j_y = 20, $j_Jy = 30
      For $i = 0 To 11
;~                         0到11共12个   
                $aCheckbox[$i + 1][$x] = GUICtrlCreateCheckbox($aCkTxt[$i], 10, $j_Jy + $j_y * $i, 70, 15)
;~                =建立复选框(复选框的名字(1到12),左侧,每个复选的顶部,宽度,高度)
;~ 每个(<1>=30+20*0 <2>=30+20*1 <3>=30+20*3.....<12>=30+20*12)
                           
                           GUIStartGroup()
;~                         使此后所有被创建的控件都归为一组(默认使用上一次用过的句柄)
                For $ii = 0 To 7
;~                                    0 到 7共 8个
;~                      Assign ( "变量名", "数据" [, 标志] )给指定变量赋值2 是强制创建为全局作用域变量
                        Assign($aCheckbox[$i + 1][$x] & '_' & $ii, GUICtrlCreateRadio($aRdTxt[$ii], _
                                        80 + $j_x * $ii, $j_Jy + $j_y * $i, 30, 17),2)
;~                                    给指定变量赋值(单选 1 到 12 【$x】&'_'& 0 到 7,创建单选框(名字和排序 0到 7,)_
;~                                                                              80+32*0 到 7,30+20*0 到11,30,17),强制创建为全局作用域变量)
                        GUICtrlSetState(-1, 128)
;~                                              调整指定控件的状态(这一个控件,变成灰色《即不可用》)
                Next
;~                              结束 0 到 7共 8个
                If Not IsInt($i / 2) Then $j_Jy += 20
;~                      如果    不是整形数则添加 20 到 $j_Jy
;~ (用+20 留出每两个复选的间距)
      Next
;~            结束 0 到 11 共12个
EndFunc   ;==>_CreateTab

zzyzzyboy 发表于 2012-3-13 21:12:30

楼上大哥的太复杂了,我只想实现简单的功能


我想从1.TXT里读取随机数10 和15 这两个值
然后用Random 随机获得 10--15这之间的一个值

zitoy 发表于 2012-3-13 21:12:35

IniRead 不是用来读数组的

$arry=IniRead("1.txt","设置","随机数","10,20")
MsgBox(0,"第一个随机数为 ...
veket_linux 发表于 2012-3-13 21:04 http://www.autoitx.com/images/common/back.gif

可再用下面函数:
    StringSplit ( "字符串", "分隔符" [, 标志 ] )

veket_linux 发表于 2012-3-13 21:13:35

突然发现 IniRead 可以读取txt

afan 发表于 2012-3-13 21:24:39

本帖最后由 afan 于 2012-3-13 21:50 编辑

用 StringSplit() 还得处理可能的空格,还是正则吧~
$a = _CreateRandomArray()
If @error Then Exit MsgBox(16, '', '错误')
MsgBox(0, '随机数:', Random($a, $a, 1))

Func _CreateRandomArray($zz = '10-15')
        Local $val = IniRead('1.txt', '设置', '随机数', $zz)
        Local $aSR = StringRegExp($val, '\d+', 3)
        If @error Or (UBound($aSR) < 2) Or ($aSR = $aSR) Then Return SetError(1)
        If $aSR < $aSR Then Return $aSR
        Local $aOK = [$aSR, $aSR]
        Return $aOK
EndFunc   ;==>_CreateRandomArray忘了LZ是想要 a-b 之间的所有数…

水木子 发表于 2012-3-13 21:25:12

$sText = IniRead('1.txt', '设置', '随机数', '10,20')
$aText = StringSplit($sText, ',', 2)
MsgBox(0, '', Random($aText, $aText, 1))

veket_linux 发表于 2012-3-13 21:27:45

1.ini
[设置]
随机数1=10,27,71,23
随机数2=42,15,59,98
随机数3=76,18,59,36

IniReadSection 读出来 ,然后 StringSplit 按 "," 拆分


#include <Array.au3>
Dim $random_data
$arry = IniReadSection("1.ini","设置")
;_ArrayDisplay($arry)
For $i = 1 To 3
        $tmp = StringSplit($arry[$i], ",")
        For $j = 1 To 4
                $random_data[$i-1][$j-1] = Number($tmp[$j])
        Next
Next
_ArrayDisplay($random_data)

netegg 发表于 2012-3-13 22:02:09

回复 9# veket_linux
只要文件结构符合ini都可以用,reg的导出文件都可以,别说文本了

hzxymkb 发表于 2012-3-13 22:33:23

回复 10# afan


    你的代码这么复杂,楼主估计看不懂!

hzxymkb 发表于 2012-3-13 22:33:48

回复 11# 水木子


    这个简单,楼主应该能看得懂!
水哥,很久不见咯!
页: [1] 2
查看完整版本: 初级的数组使用方法~大家帮忙看一下