mqqep 发表于 2017-9-25 18:10:37

请问一下数组取值问题

本帖最后由 mqqep 于 2017-9-25 18:34 编辑

Speed: 4301 h/s, Total Shares: 17, Rejected: 0, Mining time: 00:05
ddddddddddxxxxxxxxxxxxxxxxx
Speed: 4311 h/s, Total Shares: 17, Rejected: 0, Mining time: 00:10
aaaaaaaaaaaaaaaaaaaaaaa
Speed: 4301 h/s, Total Shares: 17, Rejected: 0, Mining time: 00:05
xxxxxxxxxxxxxxxxxxxxxxxxxxx
ddddddddddddfaaaaaaaaaaaaaaadfdsa
Speed: 4321 h/s, Total Shares: 17, Rejected: 0, Mining time: 00:55
fddddddddddddddddddddddddddddd
a46666666666666666664545454
5445544444444444444
Speed: 4333 h/s, Total Shares: 17, Rejected: 0, Mining time: 01:11
fddddddddddddddddddddddddddddddddddddd
........
以上文本每隔一段时间就变化出现的行数,目前举例是5行,有时候5行,6行不等。

$aArray = StringRegExp($line, 'Speed:\s(\d+)\s',3)
      $aArray1 = StringRegExp($line, 'time:\s(\d+\D\d+)',3 )
                Sleep(100)
          For $i = 0 To UBound($aArray) - 1
                          For $ii =0 to UBound($aArray1) - 1
                GUICtrlSetData($myedit,$aArray1[$ii]&$aArray[$i] &"h/s",-1)

循环执行以上代码,因为$line是每隔一段时间变动一次的,所以 UBound($aArray)UBound($aArray1) 每次得到的行数都不一样,比如得到7行时,我只想得到第7行的time 和speed
就是每次得到最后一行的time和speed,上面的写法是得到全部了,请问该怎么写变量

zghwelcome 发表于 2017-9-25 20:51:31

本帖最后由 zghwelcome 于 2017-9-25 22:18 编辑

$aArray = StringRegExp($line, '(?si)Speed:\s*(\d+)\V+?time:\s*(\d+\D\d+)(?!.*?Speed:)', 1)
If Not @error Then GUICtrlSetData($myedit, $aArray & ' ' & $aArray & "h/s", -1)

yamakawa 发表于 2017-9-25 22:01:18

本帖最后由 yamakawa 于 2017-9-25 22:10 编辑

回复 1# mqqep


    暂时没头绪,想不出合适的正则。。但是你这情况很好搞定啊。。。因为不管是多少行,最后一行在数组中的序号一定是UBound($aArray) - 1所以我的临时办法是Speed:\s*(\d+).*?time:\s*(\V+)然后取值的时候 GUICtrlSetData($myedit,"用时 " & $aArray & "速度 " &$aArray,-1)

yamakawa 发表于 2017-9-25 22:02:16

本帖最后由 yamakawa 于 2017-9-27 20:47 编辑

另外,,实测,2楼的不行

2楼的也可以,,之前没注意用的参数是 1.。抱歉

yamakawa 发表于 2017-9-27 20:44:34

回复 1# mqqep


    今天闲的蛋疼,又看了下你这帖子。。。
   试试(?s).+Speed:\s*(\d+).*?time:\s*(\V+)
页: [1]
查看完整版本: 请问一下数组取值问题