Здравствуйте, В массив $aResult записаны ссылки, файл hyt.txt содержит ссылки построчно. Подскажите, как удалить из массива ссылки которые есть в файле.
Код:
$oLinks = _IELinkGetCollection($oIE)
;For $i = 0 To 1
For $oLink in $oLinks
If StringInStr($oLink.href, $sMyString) Then
$aResult[0] = UBound($aResult)
_ArrayAdd($aResult, $oLink.href)
EndIf
Next
_ArrayDisplay($aResult)
Local $ahref = FileReadToArray('hit.txt')
Local $shref = '', $nS = 0
For $oLink In $oLinks
If StringInStr($oLink.href, $sMyString) Then
For $i = 0 To UBound($ahref) - 1
If $oLink.href = $ahref[$i] Then $nS = 1
ExitLoop
Next
If $nS Then
$nS = 0
Else
$shref &= $oLink.href & '|'
EndIf
EndIf
Next
$shref = StringTrimRight($shref, 1)
$aResult = StringSplit($shref, '|', 1)
_ArrayDisplay($aResult)
#include <Array.au3>
$oLinks = _IELinkGetCollection($oIE)
$hyt_arr=FileReadToArray("hyt.txt") ;читаем файл в массив
;For $i = 0 To 1
For $oLink in $oLinks
If StringInStr($oLink.href, $sMyString) Then
$aResult[0] = UBound($aResult)
If _ArraySearch($hyt_arr, $oLink.href) = -1 Then ;если значение не найдено в файле, добавляем его в массив $aResult
_ArrayAdd($aResult, $oLink.href)
EndIf
EndIf
Next
_ArrayDisplay($aResult)
;вариант с удалением
For $i=0 To UBound($hyt_arr)-1
$ind = _ArraySearch($aResult, $hyt_arr[$i])
If $ind <> -1 Then
_ArrayDelete($aResult, $ind)
EndIf
Next
Доброго времени суток! помогите с вышеупомянутым кодом.
Нужно сделать, что бы из массива $aResult удалялись частичные совпадения которые указаны в массиве $A_MASKA
ПРИМЕР:
Код:
GLOBAL $A_RESULT[0]
GLOBAL $A_MASKA[0]
_ArrayAdd($A_RESULT, "1111.jpg",""," ")
_ArrayAdd($A_RESULT, "[email protected]",""," ")
_ArrayAdd($A_RESULT, "1111",""," ")
_ArrayAdd($A_MASKA, ".jpg",""," ")
_ArrayAdd($A_MASKA, "[email protected]",""," ")
For $i=0 To UBound($A_MASKA)-1
$ind = _ArraySearch($A_RESULT, $A_MASKA[$i]) ; тут нужно сделать, что бы например: "1111.jpg = .jpg"
If $ind <> -1 Then
_ArrayDelete($A_RESULT, $ind) ; и соответственно если "1111.jpg = .jpg" , то удалить строку
EndIf
Next
_ArrayDisplay($A_RESULT)
Столкнулся с новой проблемой. Если руками, для теста, заполнить массив как в примере, тогда массив чистится без проблем. Однако, если получаю ссылки в массив через библиотеку UIAUTOMATE.au3, то массив не получается почистить.
Код:
;==============================================================
; ПОЛУЧИЛИ ВСЕ ПОДРЯД ССЫЛКИ В МАССИВ $A_PARSER_SITE_no_uniq[0]
;==============================================================
Global $A_PARSER_SITE_no_uniq[0]
$All = _UIA_FindAllElements($oParent)
For $i = 1 to $All[0]
If _UIA_ElementGetPropertyValue($All[$i], "LocalizedControlType") = "ссылка" Then
_ArrayAdd($A_PARSER_SITE_no_uniq, _UIA_ElementGetPropertyValue($All[$i], "Value.Value"),""," ")
Endif
Next
;==============================================================
; ЧИСТИМ МАССИВ ПО МАСКЕ
;==============================================================
GLOBAL $A_MASKA[0]
_ArrayAdd($A_MASKA, "yandex",""," ") ; для проверки
For $i=0 To UBound($A_MASKA)-1
$ind = _ArraySearch($A_PARSER_SITE_no_uniq, $A_MASKA[$i],0,0,0,1)
If $ind <> -1 Then
_ArrayDelete($A_PARSER_SITE_no_uniq, $ind)
EndIf
Next
_ArrayDisplay($A_PARSER_SITE_no_uniq) ; на выходе массив без изменений, все ссылки содержащие yandex на месте
Столкнулся с новой проблемой. Если руками, для теста, заполнить массив как в примере, тогда массив чистится без проблем. Однако, если получаю ссылки в массив через библиотеку UIAUTOMATE.au3, то массив не получается почистить.
Код:
;==============================================================
; ПОЛУЧИЛИ ВСЕ ПОДРЯД ССЫЛКИ В МАССИВ $A_PARSER_SITE_no_uniq[0]
;==============================================================
Global $A_PARSER_SITE_no_uniq[0]
$All = _UIA_FindAllElements($oParent)
For $i = 1 to $All[0]
If _UIA_ElementGetPropertyValue($All[$i], "LocalizedControlType") = "ссылка" Then
_ArrayAdd($A_PARSER_SITE_no_uniq, _UIA_ElementGetPropertyValue($All[$i], "Value.Value"),""," ")
Endif
Next
;==============================================================
; ЧИСТИМ МАССИВ ПО МАСКЕ
;==============================================================
GLOBAL $A_MASKA[0]
_ArrayAdd($A_MASKA, "yandex",""," ") ; для проверки
For $i=0 To UBound($A_MASKA)-1
$ind = _ArraySearch($A_PARSER_SITE_no_uniq, $A_MASKA[$i],0,0,0,1)
If $ind <> -1 Then
_ArrayDelete($A_PARSER_SITE_no_uniq, $ind)
EndIf
Next
_ArrayDisplay($A_PARSER_SITE_no_uniq) ; на выходе массив без изменений, все ссылки содержащие yandex на месте
Так же если в $A_PARSER_SITE_no_uniq добавить новые строки "yandex" , "yandex.ru", после того как массив заполнился ссылками с сайта - они так же не удаляются
Сообщение автоматически объединено:
невнимателен был, удаляется 1 строка. Я так понимаю зациклить надо. Но как правильно это сделать?
Сообщение автоматически объединено:
Возможно я не совсем точно сформулировал вопрос. Нужно что бы все значения массива $A_MASKA были удалены из массива $A_PARSER_SITE_no_uniq.
в текущем варианте удаляется только по 1 совпадению.
Сообщение автоматически объединено:
Решил вопрос циклом While Wend
Знаете, как лучше сделать, поделитесь пожалуйста
Код:
For $i=0 To UBound($A_MASKA)-1
while 1
$ind = _ArraySearch($A_PARSER_SITE_no_uniq, $A_MASKA[$i],0,0,0,1)
If $ind <> -1 Then
_ArrayDelete($A_PARSER_SITE_no_uniq, $ind)
else
exitLoop
endif
Wend
Next
Я не знаю что вы автоматизируете, но если вам нужно получить список уникальных ссылок отфильтрованных по маске, думаю такой пример подойдет.
Код:
#include <Array.au3>
#include <UIAutomate\UIAutomate.au3> ; установите свой путь к библиотеке
example()
Func example()
Opt('WinTitleMatchMode', 2)
Local $hWnd = WinWait('- Google Chrome', '', 5) ; замените на запуск своего браузера/окна
If Not $hWnd Then Exit MsgBox(0, Default, 'Окно " - Google Chrome" не найдено')
WinActivate($hWnd)
Local $oParent = _UIA_GetElementFromHandle($hWnd)
Local $aMask[] = ['.jpg', 'yandex', '[email protected]']
Local $aUrls = getUrls($oParent, $aMask)
_ArrayDisplay($aUrls)
EndFunc ;==>example
Func getUrls($oParent, Const ByRef $aMask)
Local $aAll = _UIA_FindAllElements($oParent, $UIA_ControlTypePropertyId, $UIA_HyperlinkControlTypeId)
If @error Then Return
Local $iCount = UBound($aMask) - 1
Local $oDict = ObjCreate('Scripting.Dictionary')
Local $sValue
For $i = 1 To $aAll[0]
$sValue = _UIA_ElementGetPropertyValue($aAll[$i], $UIA_ValueValuePropertyId)
If $sValue Then
For $j = 0 To $iCount
If StringInStr($sValue, $aMask[$j]) Then ContinueLoop 2
Next
$oDict.Item($sValue)
EndIf
Next
Return $oDict.Keys
EndFunc ;==>getUrls
Я не знаю что вы автоматизируете, но если вам нужно получить список уникальных ссылок отфильтрованных по маске, думаю такой пример подойдет.
Код:
#include <Array.au3>
#include <UIAutomate\UIAutomate.au3> ; установите свой путь к библиотеке
example()
Func example()
Opt('WinTitleMatchMode', 2)
Local $hWnd = WinWait('- Google Chrome', '', 5) ; замените на запуск своего браузера/окна
If Not $hWnd Then Exit MsgBox(0, Default, 'Окно " - Google Chrome" не найдено')
WinActivate($hWnd)
Local $oParent = _UIA_GetElementFromHandle($hWnd)
Local $aMask[] = ['.jpg', 'yandex', '[email protected]']
Local $aUrls = getUrls($oParent, $aMask)
_ArrayDisplay($aUrls)
EndFunc ;==>example
Func getUrls($oParent, Const ByRef $aMask)
Local $aAll = _UIA_FindAllElements($oParent, $UIA_ControlTypePropertyId, $UIA_HyperlinkControlTypeId)
If @error Then Return
Local $iCount = UBound($aMask) - 1
Local $oDict = ObjCreate('Scripting.Dictionary')
Local $sValue
For $i = 1 To $aAll[0]
$sValue = _UIA_ElementGetPropertyValue($aAll[$i], $UIA_ValueValuePropertyId)
If $sValue Then
For $j = 0 To $iCount
If StringInStr($sValue, $aMask[$j]) Then ContinueLoop 2
Next
$oDict.Item($sValue)
EndIf
Next
Return $oDict.Keys
EndFunc ;==>getUrls