Что нового

For...In... Цикл для объектов. Переход через объект

wannahead2

Новичок
Сообщения
2
Репутация
0
Здравствуйте!
У меня возник вопрос, как перейти к нужному элементу в цикле For In.
К примеру в конструкции For to Next можно явно указать что на i-ом шаге, к примеру, надо использовать i+2 элемент, т.к. там есть счетчик - i.

Как быть если имеется конструкция For In (см. пример), и в частности бежит переменная $mst_i_ah, если она соответствует условию If StringRegExp тогда мне нужна не эта строка $mst_i_ah, а к примеру строка которая будет через 2 элемента.

Спасибо.

Фрагмент кода привожу.



[hide]
Код:
#include <MsgBoxConstants.au3>
#include <Array.au3>
#include <IE.au3>
#include <File.au3>


HotKeySet("{ESC}", "Terminate")

Func Terminate()
    Exit 0
 EndFunc   ;==>Terminate

   Local $aProcessList = ProcessList("iexplore.exe")
    For $i = 1 To $aProcessList[0][0]
        ;MsgBox($MB_SYSTEMMODAL, "", $aProcessList[$i][0] & @CRLF & "PID: " & $aProcessList[$i][1])
		ProcessClose($aProcessList[$i][1])
    Next

$sUrl= "http://www.google.ru/"
$oIE=_IECreate($sUrl,0,1)
_IELoadWait($oIE)
$oLinks=_IETagNameAllGetCollection($oIE)

If Not @error Then
	  For $oLink In $oLinks
		 $mst_ahref = $oLink.getElementsByTagName("a")
		 for $mst_i_ah in $mst_ahref
			If StringRegExp($mst_i_ah.textContent, "(?:Blogger)") Then
			   ConsoleWrite($mst_i_ah.textContent&@CRLF)
			EndIf
		 Next

	  Next
   EndIf

_IEQuit($oIE)

[/hide]
 
A

Alofa

Гость
Код:
Local $iK

If Not @error Then
	For $oLink In $oLinks
		$mst_ahref = $oLink.getElementsByTagName("a")
		For $mst_i_ah In $mst_ahref
			;If StringRegExp($mst_i_ah.textContent, "(?:Blogger)") Then
			If StringInStr($mst_i_ah.textContent, 'Blogger', 1) Then
				$iK += 1
				If $iK = 3 Then ConsoleWrite('+>$iK = ' & $iK & ' ' & $mst_i_ah.textContent & @CRLF)
			EndIf
		Next
	Next
EndIf
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
wannahead2
явно указать что на i-ом шаге
Альтернативный вариант перебора коллекции
Код:
$mst_ahref = $oLink.getElementsByTagName("a")
         for $i = 0 To $mst_ahref.Length - 1
            If StringRegExp($mst_ahref($i).textContent, "(?:Blogger)") Then
               ConsoleWrite($mst_ahref($i).textContent & @CRLF)
            EndIf
         Next
 
Автор
W

wannahead2

Новичок
Сообщения
2
Репутация
0
Alofa сказал(а):
Код:
Local $iK

If Not @error Then
	For $oLink In $oLinks
		$mst_ahref = $oLink.getElementsByTagName("a")
		For $mst_i_ah In $mst_ahref
			;If StringRegExp($mst_i_ah.textContent, "(?:Blogger)") Then
			If StringInStr($mst_i_ah.textContent, 'Blogger', 1) Then
				$iK += 1
				If $iK = 3 Then ConsoleWrite('+>$iK = ' & $iK & ' ' & $mst_i_ah.textContent & @CRLF)
			EndIf
		Next
	Next
EndIf

Не много не то... в Вашем примере будет только 3 Blogger (точнее строка содержащая это слово) отображаться, т.к счетчик прибавляется именно при поподании в условие If StringInStr. А Вопрос был, как раз как перейти через несколько строк от ключевой строк (Blogger), т.е. нашли Blogger, и от него надо 2 строчки отсчитать. Причем не один раз, а от каждого встречающегося слова (Blogger).

Спасибо InnI. Честно говоря первый раз вижу круглые скобки для обозначения i-ого элемента. Подскажите, они только для Коллекции объектов ? не могли бы написать пару строк про их применение (откуда пошли? от VB?, с VB не знаком просто) и отличие от квадратных []. Для массива они("($i)") не применимы я так понимаю ?


InnI сказал(а):
wannahead2
явно указать что на i-ом шаге
Альтернативный вариант перебора коллекции
Код:
$mst_ahref = $oLink.getElementsByTagName("a")
         for $i = 0 To $mst_ahref.Length - 1
            If StringRegExp($mst_ahref($i).textContent, "(?:Blogger)") Then
               ConsoleWrite($mst_ahref($i).textContent & @CRLF)
            EndIf
         Next
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
wannahead2 [?]
пару строк про их применение
При работе с объектами AutoIt не знает, что вы передаёте - индекс массива, длину строки, число календаря... Для AutoIt это просто параметр, который нужно передать свойству или методу объекта. А параметры, согласно синтаксису AutoIt, указываются в круглых скобках.
 
Верх