Что нового

[Ошибки] проверка на ошибки поиска данных в строке

gagarin74

Новичок
Сообщения
44
Репутация
0
Версия AutoIt: 3.

Описание:
Добрейшего дня :laugh:
Есть функция
Код:
Func _GetRate()
    Local $ir = InetRead('http://www.sberbank.ru/moscow/ru/quotes/currencies/', 1)

    Local $bts = BinaryToString($ir)
    Local $srate = _StringBetween($bts, ':#cc0000">', '</td>')
    Return $srate
EndFunc   ;==>_GetRate


И обработка её (вытаскивание данных в переменную)
Код:
Local $rate = _GetRate()
$sdsd=StringStripWS($rate[0], 3)
$sdsd=StringReplace($sdsd, ",", ".")
ConsoleWrite($sdsd& "  Вывод результата "&@LF)


В лабораторных условиях работает всё на ура!!!!
Но стоит дизайнерам сайта поменять цвет вывода значений с #cc0000 на любой другой -происходит фиаско :scratch:
Программа выдаёт в консоле ошибку
Код:
"C:\Users\admin\Desktop\rfr.au3" (67) : ==> Subscript used on non-accessible variable.:
$sdsd=StringStripWS($rate[0], 3)
$sdsd=StringStripWS($rate^ ERROR
>Exit code: 1    Time: 5.523

Соответственно хотелось бы узнать как правильно обходить это дело. Для решения моей проблемы,достаточно что бы Вы подсказали как внедрить оператор IF.

Типо если на выходе ошибка - окно предупреждения(перезагрузка скрипта,звук,подбор другого цвета в переменной),достаточно наверное окна предупреждения и остановки скрипта-дальше сам до леплю.




Примечания:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
gagarin74
смотри справку по
Код:
_StringBetween

там указано, когда функция возвращает ошибку. так как из за нее у тебя весь код и валится .
возможно, следует отказаться от такого парсинга


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

можно использовать постоянные строки и вычислить строку, которая меняется . в данном случае цвет
Код:
#include <String.au3>
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Курс валют", 359, 128, 283, 215)
$Label1 = GUICtrlCreateLabel("Доллар", 16, 56, 83, 17)
$Label2 = GUICtrlCreateLabel("Евро", 16, 88, 85, 17)
$Label3 = GUICtrlCreateLabel("Покупка", 120, 16, 87, 17)
$Label4 = GUICtrlCreateLabel("Продажа", 240, 16, 98, 17)
$Label5 = GUICtrlCreateLabel("", 120, 56, 84, 17)
$Label6 = GUICtrlCreateLabel("", 240, 56, 100, 17)
$Label7 = GUICtrlCreateLabel("", 120, 88, 84, 17)
$Label8 = GUICtrlCreateLabel("", 240, 88, 100, 17)
GUISetState(@SW_SHOW)
Local $rate = _GetRate()
If Not @error Then
GUICtrlSetData($Label5, StringStripWS($rate[0], 3))
GUICtrlSetData($Label6, StringStripWS($rate[1], 3))
GUICtrlSetData($Label7, StringStripWS($rate[2], 3))
GUICtrlSetData($Label8, StringStripWS($rate[3], 3))
EndIf
Local $timer = TimerInit()
While 1
    If TimerDiff($timer) >= 1800 * 1000 Then
        $rate = _GetRate()
        GUICtrlSetData($Label5, $rate[0])
        GUICtrlSetData($Label6, $rate[1])
        GUICtrlSetData($Label7, $rate[2])
        GUICtrlSetData($Label8, $rate[3])
        $timer = TimerInit()
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func _GetRate()
    Local $ir = InetRead('http://www.sberbank.ru/moscow/ru/quotes/currencies/', 1)
    Local $bts = BinaryToString($ir)
    Local $srate = _StringBetween($bts, '<td style="vertical-align:middle;font-size:16px;color:', '">');если параметр цвета изменился
	If @error Then Return SetError(1,0,0)
	Local $Res = _StringBetween($bts, $srate[0] & '">', '</td>')
	If @error Then Return SetError(2,0,0)
    Return $Res
EndFunc   ;==>_GetRate
привожу весь код из другой темы.тут есть и обработка ошибок.
но еще раз скажу, есть более точные варианты получения результата.
хотя я пользуюсь таким :smile:
 
Автор
G

gagarin74

Новичок
Сообщения
44
Репутация
0
Вот спасибо!!!!
а я как лашара
тыркал вот это $sdsd=StringStripWS($rate[0], 3)

теперь можно сделать разветвление на 4 цвета (больше изменений не замечал)
 
Верх