Что нового

Аналог Foreach из PHP в AutoIt

Warchant

Новичок
Сообщения
5
Репутация
0
Есть массив $dev[10][2]
нужно перебрать каждое значение $dev[$i][0] и $dev[$i][1], то есть аналог foreach из PHP

Код:
foreach($dev as $d){
echo $d[0].$d[1];
}
Код:
For $d in $dev
...
Next


не дает результата... в хэлпе написано, что $dev должен быть объектом. Как быть?

UPD: проблема в том, что неизвестно, будет 10 элементов и массиве или меньше. Иначе можно было бы простым циклом от 0 до 9 сделать.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
Dim $arr [10][2]=[[1,2],[3,4],[5,6],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]
For $i=0 To UBound($arr)-1
	MsgBox(0,'',$arr[$i][0]&','&$arr[$i][1])
Next

так?
 
Автор
W

Warchant

Новичок
Сообщения
5
Репутация
0
Уже более похоже на то, что нужно :smile:, но цикл все-ровно выполняется все 9 (10-1) раз.
Допустим в массиве 3 элемента. Тогда MsgBox высветится 3 раза (что правильно), а потом пустой еще 6 раз (что неправильно).
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
Dim $arr [3][2]=[[1,2],[3,4],[5,6]]
For $i=0 To UBound($arr)-1
	MsgBox(0,'',$arr[$i][0]&','&$arr[$i][1])
Next
 
Автор
W

Warchant

Новичок
Сообщения
5
Репутация
0
У Вас указан размер массива 3x2. Если же будет 10x2 высветится 9 раз...
Код:
$device = _NetDevGet()
;=======================================================================
For $i=0 To UBound($device)-1
    MsgBox(0,'',$device[$i][0]&','&$device[$i][1])
	ToolTip($i)
	
Next
;=======================================================================
Func _NetDevGet()
$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
$objClass = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")
Local $Dev[10][2]
Local $i=0
For $obj in $objClass
   If StringLen($obj.NetConnectionID)>0 Then 
   $Dev[$i][0]=$obj.NetConnectionID ;название подключения
   $Dev[$i][1]=$obj.Name ;название адаптера
   $i=$i+1
	  EndIf
 Next
 
 Return $Dev
 EndFunc


Если запускать так - MsgBox высвечивается 9 раз


Добавлено:
Сообщение автоматически объединено:

Есть какая-нибудь команда прерывания цикла в AutoIt? Если да, то можно сделать так:
Код:
For $i=0 To UBound($device)-1
    MsgBox(0,'',$device[$i][0]&','&$device[$i][1])
If Not StringLen($device[$i+1][0])>0 Then "комманда прерывания"
Next
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
For $i=0 To UBound($device)-1
    MsgBox(0,'',$device[$i][0]&','&$device[$i][1])
If Not StringLen($device[$i+1][0])>0 Then ExitLoop
Next



Добавлено:
Сообщение автоматически объединено:

Код:
#include 'array.au3'
$device = _NetDevGet()
;~ _ArrayDisplay($device)
$arr=_ArrayFindAll($device,'')
For $i=0 To UBound($arr)-1
	_ArrayDelete($device,$arr[$i])
Next
;~ _ArrayDisplay($device)
;=======================================================================
For $i=0 To UBound($device)-1
    MsgBox(0,'',$device[$i][0]&','&$device[$i][1])
    ToolTip($i)

Next
;=======================================================================
Func _NetDevGet()
$objWMIService = ObjGet("winmgmts:\\.\root\cimv2")
$objClass = $objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")
Local $Dev[10][2]
Local $i=0
For $obj in $objClass
   If StringLen($obj.NetConnectionID)>0 Then
   $Dev[$i][0]=$obj.NetConnectionID ;название подключения
   $Dev[$i][1]=$obj.Name ;название адаптера
   $i=$i+1
      EndIf
 Next

 Return $Dev
 EndFunc

ещё вариант.
 
Верх