Что нового

[Автоматизация] Наблюдение за определённой частью html - считывание html

Dk

Новичок
Сообщения
358
Репутация
2
Версия AutoIt:
3.3.8
Описание:
Есть тхт файл "1.txt" с номерами и ценами товаров. Вначале идёт номер а через ";" идёт цена.
(в столбик)
3131484743;25
3504157372;96

Эти номера являются частью URL, вот пример одного http://www.amazon.de/gp/product/3504157372
Вообщем он выводи на товар.
Мне нужно следующее.
Программа должна с помощью этих номеров считывать с интервалом 1 минуту в разделе "gebraucht" и в разделе "neu" цену и если эта цена стала такой же или ниже, чем цена, которая указанна в текстовом файле, то открывалось бы окно IE с ссылкой на этот товар и проигрывался бы звуковой сигнал - считывался бы файл 1.wav

Примечания:
Очень важны следующие моменты.
1) важно что-бы именно на каждый номер открывалось ИЕ-окно и на каждый номер воспроизводился звук. Нужен интервал в 30 секунд, что бы сразу не "вылетала" куча окон. Открылся один "номер" сделал всё заданное и через секунд 30 следующее "совпадение" - номер.

2) У меня очень поверхностные знания Autoita, поэтому большая просьба как можно попроще сделать скрипт, что-бы я в дальнейшем мог его дополнять, особенно ту часть где происходит последователнасть действий: открыть IE-Окно, проиграть звук. Что-бы я мог легко вписать ещё пару действий.
ps
Есть определённые причины почему это не делается через Amazon-API.

Очень надеюсь на вашу помощь
Спасибо
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Dk [?]
Открылся один "номер" сделал всё заданное и через секунд 30 следующее "совпадение" - номер.
открыть IE-Окно, проиграть звук. Что-бы я мог легко вписать ещё пару действий.
Не волнуйтесь, вписанные вами действия выполнятся в текущем окне до открытия нового.

Предположим:
Цена сменилась, окно открылось - вы выполнили операции. Следует ли далее следить за этим адресом( в этом случае базовую цену оставить прежней или считать новую с сайта) или же нет?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Следить далее и оставить базовую цену прежней.
пс
В идеале конечно было бы супер если бы после того как произошло падение цены открывалось окошко ввода с базовой ценой которую я мог бы при необходимости изменить не заходя в сам текстовой файл, ну и разумеется сохранить изменение.
Но это уже роскошь :-[ :-[ :-[
но было бы супер :-[




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


Выдаёт следующею ошибку :-\

(50) : ==> "ReDim" used without an array variable.:
ReDim $aRet[ ( $iSize / 2 ) + 1 ][ 2 ] = [ [ $iSize / 2 ] ]
ReDim ^ ERROR
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Перед строкой 50 проверьте, является ли $aRet массивом.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Вроде все поправил, изменил логику работы под новое задание.
Однако один момент крайне неудобен, ведь при получении новой цены и до изменения старой при проверке эта ссылка будет всегда подходить к обработке, так что я сделал вот как:
При изменении цены ссылка не будет обрабатываться до применения новой цены.
Применение новой цены происходит один раз каждые $iInputBo:rofl:elay путем вызова InputBox с информацией о старой/новых ценах и таймаутом 5 секунд (что бы не вешать работу скрипта).

Также добавил новый хоткей - при вызове можно будет тут же обновить все цены.

Код:
#Include <IE.au3>
#Include <Array.au3>

Const $iCheckDelay = 10 * 1000 ;ms
Const $iInputBoxDelay = 10 * 1000 ;ms ;0 - отключить
Const $iInputBoxTimeout = 5 ;sec

Const $sFile = "1.txt"
Const $sWav = "1.wav"
Const $sUrl = "http://www.amazon.de/gp/product/"
; ---
Global $aInfo = __LoadInfo( $sFile )
Global $aValid[ 999 ] = [ 0 ]

Global $oIE = _IECreate(), $ocIE
; ---
Global $hTimer = TimerInit()

HotKeySet( "{F6}", "__Quit" )
HotKeySet( "{F7}", "__UpdateAll" )
AdlibRegister( "__CheckMain", $iCheckDelay )
__CheckMain()
; ---
While Sleep( 10 )
    If $aValid[0] Then
        SoundPlay ( $sWav )
        $ocIE = _IECreate( $sUrl & $aInfo[$aValid[1]][1], 1 )
        ; ---
        ;Ваши действия с $ocIE

        ; ---
        _IEQuit( $ocIE )
        $aValid[0] -= 1 ;DelUrl
        _ArrayDelete( $aValid, 1 )
    EndIf
WEnd

Func __CheckMain()
    Local $Idx, $aRet
    ; ---
    For $Idx = 1 To $aInfo[0][0] Step 1
        If $aInfo[$Idx][0] Then
            $aRet = __CheckUrl( $Idx )
            If IsArray( $aRet ) Then
                $aInfo[$Idx][0] = False
                $aInfo[$Idx][3] = $aRet[0] & "|" & $aRet[1]

                $aValid[0] += 1 ;AddUrl
                $aValid[$aValid[0]] = $Idx
            EndIf
        ElseIf $iInputBoxDelay And TimerDiff( $hTimer ) >= $iInputBoxDelay Then
            $hTimer = TimerInit()
            ; ---
            __Update( $Idx )
        EndIf
    Next
EndFunc

Func __UpdateAll()
    Local $Idx
    ; ---
    For $Idx = 1 To $aInfo[0][0] Step 1
        If Not $aInfo[$Idx][0] Then _
            __Update( $Idx )
    Next
EndFunc

Func __Update( $iIndex )
    Local $sRet
    ; ---
    $sRet = InputBox( "Value changed (" & $aInfo[$iIndex][1] & ")", "Old value: " & $aInfo[$iIndex][2] & @LF & "New values: " & $aInfo[$iIndex][3] & @LF & _
        @LF & "Enter new value...", $aInfo[$iIndex][2], "", -1, -1, Default, Default, $iInputBoxTimeout )

    If $sRet And Not @Error Then
        $aInfo[$iIndex][0] = True
        $aInfo[$iIndex][2] = $sRet
        $aInfo[$iIndex][3] = ""
    EndIf
EndFunc
; ---
Func __LoadInfo( $sPath )
    Local $vRead, $iSize, $iIndex, $aRet, $Idx
    ; ---
    $vRead = StringStripCR( FileRead( $sFile ) )
    $vRead = StringRegExp( $vRead, "(\d+);(\d+)", 3 )
    $iSize = UBound( $vRead )

    Dim $aRet[ ( $iSize / 2 ) + 1 ][ 4 ] = [ [ $iSize / 2 ] ]
    For $Idx = 1 To $iSize Step 2
        $iIndex = ($Idx + 1)/2
        $aRet[$iIndex][0] = True
        $aRet[$iIndex][1] = $vRead[ $Idx - 1 ]
        $aRet[$iIndex][2] = $vRead[ $Idx ]
        $aRet[$iIndex][3] = "" ;Новые цены
    Next
    ; ---
    Return $aRet
EndFunc

Func __CheckUrl( $iIndex )
    Local $sRead, $aResult, $aRet[2]
    Local $smPattern = '</a> ab <span class="price">EUR (\d+),?'
    ; ---
    $sRead = BinaryToString( InetRead( $sUrl & $aInfo[$iIndex][1], 17 ) )
    $aResult = StringRegExp( $sRead, "(neu|gebraucht)" & $smPattern, 3 )
    If UBound( $aResult ) = 4 Then
        If $aResult[1] < $aInfo[$iIndex][2] Or $aResult[3] < $aInfo[$iIndex][2] Then
            $aRet[0] = $aResult[1]
            $aRet[1] = $aResult[3]

            Return $aRet
        EndIf
    EndIf

    Return False
EndFunc
; ---
Func __Quit()
	HotKeySet( "{F6}" )
	HotKeySet( "{F7}" )
    AdlibUnRegister( "__CheckMain" )
    ;---
    Local $hFile, $sWrite, $Idx
    ; << Save File
    If MsgBox( 36, "Warning", "Save info?" ) = 6 Then
        For $Idx = 1 To $aInfo[0][0] Step 1
            $sWrite &= $aInfo[$Idx][1] & ";" & $aInfo[$Idx][2]
            If $Idx < $aInfo[0][0] then _
                $sWrite &= @CRLF
        Next
        ; ---
        $hFile = FileOpen( $sFile, 2 )
        FileWrite( $hFile, $sWrite )
        FileClose( $hFile )
    EndIf
    ; ---
    Exit
EndFunc
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
К сожалению не работает.
Скрипт идёт.
При запуске скрипта у меня просто сразу открывается пусто окно IE (без URL)
использую вот эту строку как пример
3504157372;200
поставил сразу 200 что больше реальной цены что бы, выскачело сразу, так же ставил и меньше реальной цены, а пустое окно всё равно выскакивает.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Dk
Все работает, просто подождите 60 секунд до первого вызова функции __CheckMain(), или возьмите обновленную версию (обновил пост)

Пустое окно создается как первая вкладка, к этому окну будут крепиться и открепляться другие вкладки.

После обновления:
>Запуск
>Тут же проверка всех ссылок на валидность / не валидность
>Открытие/Обработка всех найденных ссылок
>Через 60 секунд независимо от обработки выше вторая проверка ссылок (проверенные уже не будут проверяться)
>В это же время открытие InputBox для указания новой цены к первой валидной ссылке.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Обновление работает, но не полностью.
У меня находит, открыватся окно, играет музыка, а потом окно закрывается я ждал минуты 4, но inputbox не появился для изменения цены :-\

Так уже добавил вторую строку, на неё он не среагировал никак
3131422823;100

Как эксперимент поставил здесь цену 2

3504157372;2
программа всё равно среагировала на понижение, хотя реальная цена выше
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Происходит следующее

Программа реагирует только на первую строку (на первый номер в текстовом файле), теперь появляется окно, я ввожу более низкую цену, нажимаю подтвердить, окно всё равно появляется (нет сохранения) . Сохранить можно только по клавише Ф7. Но программа всё равно реагирует так-же, всё равно говорит что произошло падение цены, хотя я поставил на 1.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Dk
Вы взяли обновленную версию?

Код:
3504157372;500
3131422823;500

Все работает. Двойное соответствие, два раза InputBox - ставим 1, более не упоминаются.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Да версия обновлённая.
Я только что поставил как у вас по 500 каждая цена. И сработали два окна.

А вы поставьте к примеру
3504157372;50
3131422823;100
Получится что первый номер высвечивается, хотя не должен, а второй не появляется хотя должен и сохранение не работает.

А если стоит везде по 500 то получается следущее.

первый номер реагирует только если сохранить на 1, если к примеру поставить 50 окно дальше будет появлятся.
Второй номер сохраняется вроде нормально.(ставил на 20 сохранилосъ)

пс
может сохранение и работает только скpипт возможно видит пpи введённые 50 на пример как 500, а если 1 то видит как 10, а 10 меньше чем актуальнaя цена на странице. Мне кажется что числа просто некорректно считываются с текстового файла и при вводе, тоесть какбудто идёт умножение на 10 или больше.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Dk
Если честно, то не поймешь этот AutoIt, то он переменные сравнивает как числа, потом решает их сравнивать как строки... Вот с приведением типов, теперь проблем быть не должно.
Код:
#Include <IE.au3>
#Include <Array.au3>

Const $iCheckDelay = 10 * 1000 ;ms
Const $iInputBoxDelay = 5 * 1000 ;ms ;0 - отключить
Const $iInputBoxTimeout = 5 ;sec

Const $sFile = "1.txt"
Const $sWav = "1.wav"
Const $sUrl = "http://www.amazon.de/gp/product/"
; ---
Global $aInfo = __LoadInfo( $sFile )
Global $aValid[ 999 ] = [ 0 ]

Global $oIE = _IECreate(), $ocIE
; ---
Global $hTimer = TimerInit()

HotKeySet( "{F6}", "__Quit" )
HotKeySet( "{F7}", "__UpdateAll" )
AdlibRegister( "__CheckMain", $iCheckDelay )
__CheckMain()
; ---
While Sleep( 10 )
    If $aValid[0] Then
        SoundPlay ( $sWav )
        $ocIE = _IECreate( $sUrl & $aInfo[$aValid[1]][1], 1 )
        ; ---
        ;Ваши действия с $ocIE
		Sleep( 2000 )
        ; ---
        _IEQuit( $ocIE )
        $aValid[0] -= 1 ;DelUrl
        _ArrayDelete( $aValid, 1 )
    EndIf
WEnd

Func __CheckMain()
    Local $Idx, $aRet
    ; ---
    For $Idx = 1 To $aInfo[0][0] Step 1
        If $aInfo[$Idx][0] Then
            $aRet = __CheckUrl( $Idx )
            If IsArray( $aRet ) Then
                $aInfo[$Idx][0] = False
                $aInfo[$Idx][3] = $aRet[0] & "|" & $aRet[1]

                $aValid[0] += 1 ;AddUrl
                $aValid[$aValid[0]] = $Idx
            EndIf
        ElseIf $iInputBoxDelay And TimerDiff( $hTimer ) >= $iInputBoxDelay Then
            $hTimer = TimerInit()
            ; ---
            __Update( $Idx )
        EndIf
    Next
EndFunc

Func __UpdateAll()
    Local $Idx
    ; ---
    For $Idx = 1 To $aInfo[0][0] Step 1
        If Not $aInfo[$Idx][0] Then _
            __Update( $Idx )
    Next
EndFunc

Func __Update( $iIndex )
    Local $sRet
    ; ---
    $sRet = InputBox( "Value changed (" & $aInfo[$iIndex][1] & ")", "Old value: " & $aInfo[$iIndex][2] & @LF & "New values: " & $aInfo[$iIndex][3] & @LF & _
        @LF & "Enter new value...", $aInfo[$iIndex][2], "", -1, -1, Default, Default, $iInputBoxTimeout )

    If $sRet And Not @Error Then
        $aInfo[$iIndex][0] = True
        $aInfo[$iIndex][2] = Int( $sRet )
        $aInfo[$iIndex][3] = ""
    EndIf
EndFunc
; ---
Func __LoadInfo( $sPath )
    Local $vRead, $iSize, $iIndex, $aRet, $Idx
    ; ---
    $vRead = StringStripCR( FileRead( $sFile ) )
    $vRead = StringRegExp( $vRead, "(\d+);(\d+)", 3 )
    $iSize = UBound( $vRead )

    Dim $aRet[ ( $iSize / 2 ) + 1 ][ 4 ] = [ [ $iSize / 2 ] ]
    For $Idx = 1 To $iSize Step 2
        $iIndex = ($Idx + 1)/2
        $aRet[$iIndex][0] = True
        $aRet[$iIndex][1] = Int( $vRead[ $Idx - 1 ] )
        $aRet[$iIndex][2] = Int( $vRead[ $Idx ] )
        $aRet[$iIndex][3] = "" ;Новые цены
    Next
    ; ---
    Return $aRet
EndFunc

Func __CheckUrl( $iIndex )
    Local $sRead, $aResult, $aRet[2]
    Local $smPattern = '</a> ab <span class="price">EUR (\d+),?'
    ; ---
    $sRead = BinaryToString( InetRead( $sUrl & $aInfo[$iIndex][1], 17 ) )
    $aResult = StringRegExp( $sRead, "(neu|gebraucht)" & $smPattern, 3 )
    If UBound( $aResult ) = 4 Then
        If Int( $aResult[1] ) < $aInfo[$iIndex][2] Or Int( $aResult[3] ) < $aInfo[$iIndex][2] Then
            $aRet[0] = Int( $aResult[1] )
            $aRet[1] = Int( $aResult[3] )

            Return $aRet
        EndIf
    EndIf

    Return False
EndFunc
; ---
Func __Quit()
	HotKeySet( "{F6}" )
	HotKeySet( "{F7}" )
    AdlibUnRegister( "__CheckMain" )
    ;---
    Local $hFile, $sWrite, $Idx
    ; << Save File
    If MsgBox( 36, "Warning", "Save info?" ) = 6 Then
        For $Idx = 1 To $aInfo[0][0] Step 1
            $sWrite &= $aInfo[$Idx][1] & ";" & $aInfo[$Idx][2]
            If $Idx < $aInfo[0][0] then _
                $sWrite &= @CRLF
        Next
        ; ---
        $hFile = FileOpen( $sFile, 2 )
        FileWrite( $hFile, $sWrite )
        FileClose( $hFile )
    EndIf
    ; ---
    Exit
EndFunc
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Ура всё работает :ok:. полное тестирование зделаю как с работы домой доберусь

Но есть пару неудобных моментов

1) Окна от IE после падения цены автоматически закрываются перед появлением Inputboxa. Можно сделать так что-бы они оставались, так как мне визуально трудно определить на какой товар сработало оповещение.

2) Пока я решаю какую новую цену вбить старый inputbox заменяется уже на новый и я не успеваю понять. Можно сделать так, что-бы на каждое "падение" был свой inputbox и он не исчезал пока я не введу туда новую цену. Хотя я могу конечно и задержку подольше поставить ...

И вопрос маленкий, например меня нет дома, инбоксы выскачели, то будут ли наблюдаться другие номера, на которых не произошло падение? (Я понял так что будут, но для уверенности... :-[)
И какая примерно скорость считывания про номер? Если например 1000 номеров?
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Dk [?]
1) Окна от IE после падения цены автоматически закрываются перед появлением Inputboxa. Можно сделать так что-бы они оставались, так как мне визуально трудно определить на какой товар сработало оповещение.
Сколько вам угодно, в условии вы упомянули свои действия ( как я понял - программные, а не ручные ) - смотрите:
Код:
; ---
        ;Ваши действия с $ocIE
        Sleep( 2000 ) ;Example, remove this line
        ; ---


2) Пока я решаю какую новую цену вбить старый inputbox заменяется уже на новый и я не успеваю понять. Можно сделать так, что-бы на каждое "падение" был свой inputbox и он не исчезал пока я не введу туда новую цену. Хотя я могу конечно и задержку подольше поставить ...
Как я уже говорил - стандартный InputBox вешает работу скрипта до получения данных (либо выхода по таймауту).

И вопрос маленкий, например меня нет дома, инбоксы выскачели, то будут ли наблюдаться другие номера, на которых не произошло падение? (Я понял так что будут, но для уверенности...
embarrassed.gif
)И какая примерно скорость считывания про номер? Если например 1000 номеров?
Верно, будут. У меня проверка одного адреса занимает приблизительно 2 секунды ( в основном проблемы оператора ), выходит один цикл проверки займет ~2к секунд (если отключить циклический вывод InputBox'ов).
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Протестировал.
Скрипт реагирует только на целые числа, как на прочтении так и в листе - текстовом файле. он не реагирует например если было 52,92 а стало 52,91.
Только если на полную единицу,например было 50 стало 49. Вообщем десятичные не берёт.
Моих знаний хватило на то, что это вроде с integer (Int) связанно )))



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

Помогите :'( :'( :'(
Осталось толкько, что-бы реагировал на десятичные и сотые и всё скрипт будет готов.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Люди добрые ну помогите :'( :'( :'( :'(

Осталось толкько, что-бы реагировал на десятичные и сотые и всё скрипт будет готов.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Код:
#Include <IE.au3>
#Include <Array.au3>

Const $iCheckDelay = 10 * 1000 ;ms
Const $iInputBoxDelay = 5 * 1000 ;ms ;0 - отключить
Const $iInputBoxTimeout = 5 ;sec ;0 - отключить

Const $sFile = "1.txt"
Const $sWav = "1.wav"
Const $sUrl = "http://www.amazon.de/gp/product/"
; ---
Global $aInfo = __LoadInfo( $sFile )
Global $aValid[ 999 ] = [ 0 ]

Global $oIE = _IECreate(), $ocIE
; ---
Global $hTimer = TimerInit()

HotKeySet( "{F6}", "__Quit" )
HotKeySet( "{F7}", "__UpdateAll" )
AdlibRegister( "__CheckMain", $iCheckDelay )
__CheckMain()
; ---
While Sleep( 10 )
    If $aValid[0] Then
        SoundPlay ( $sWav )
        $ocIE = _IECreate( $sUrl & $aInfo[$aValid[1]][1], 1 )
        ; ---
        ;Ваши действия с $ocIE
		Sleep( 2000 )
        ; ---
        _IEQuit( $ocIE )
        $aValid[0] -= 1 ;DelUrl
        _ArrayDelete( $aValid, 1 )
    EndIf
WEnd

Func __CheckMain()
    Local $Idx, $aRet
    ; ---
    For $Idx = 1 To $aInfo[0][0] Step 1
        If $aInfo[$Idx][0] Then
            $aRet = __CheckUrl( $Idx )
            If IsArray( $aRet ) Then
                $aInfo[$Idx][0] = False
                $aInfo[$Idx][3] = $aRet[0] & "|" & $aRet[1]

                $aValid[0] += 1 ;AddUrl
                $aValid[$aValid[0]] = $Idx
            EndIf
        ElseIf $iInputBoxDelay And TimerDiff( $hTimer ) >= $iInputBoxDelay Then
            $hTimer = TimerInit()
            ; ---
            __Update( $Idx )
        EndIf
    Next
EndFunc

Func __UpdateAll()
    Local $Idx
    ; ---
    For $Idx = 1 To $aInfo[0][0] Step 1
        If Not $aInfo[$Idx][0] Then _
            __Update( $Idx )
    Next
EndFunc

Func __Update( $iIndex )
    Local $sRet
    ; ---
    $sRet = InputBox( "Value changed (" & $aInfo[$iIndex][1] & ")", "Old value: " & $aInfo[$iIndex][2] & @LF & "New values: " & $aInfo[$iIndex][3] & @LF & _
        @LF & "Enter new value...", $aInfo[$iIndex][2], "", -1, -1, Default, Default, $iInputBoxTimeout )

    If $sRet And Not @Error Then
        $aInfo[$iIndex][0] = True
        $aInfo[$iIndex][2] = Round( $sRet, 2 )
        $aInfo[$iIndex][3] = ""
    EndIf
EndFunc
; ---
Func __LoadInfo( $sPath )
    Local $vRead, $iSize, $iIndex, $aRet, $Idx
    ; ---
    $vRead = StringStripCR( FileRead( $sFile ) )
    $vRead = StringRegExp( $vRead, "(\d+);(\d+\.?\d{2}?)", 3 )
    $iSize = UBound( $vRead )

    Dim $aRet[ ( $iSize / 2 ) + 1 ][ 4 ] = [ [ $iSize / 2 ] ]
    For $Idx = 1 To $iSize Step 2
        $iIndex = ($Idx + 1)/2
        $aRet[$iIndex][0] = True
        $aRet[$iIndex][1] = Int( $vRead[ $Idx - 1 ] )
        $aRet[$iIndex][2] = Round( $vRead[ $Idx ], 2 )
        $aRet[$iIndex][3] = "" ;Новые цены
    Next
    ; ---
    Return $aRet
EndFunc

Func __CheckUrl( $iIndex )
    Local $sRead, $aResult, $aRet[2]
    Local $smPattern = '</a> ab <span class="price">EUR (\d+,\d+)'
    ; ---
    $sRead = BinaryToString( InetRead( $sUrl & $aInfo[$iIndex][1], 17 ) )
    $aResult = StringRegExp( $sRead, "(neu|gebraucht)" & $smPattern, 3 )

    If UBound( $aResult ) = 4 Then
		$aResult[1] = Round( StringReplace( $aResult[1], ",", "." ), 2 )
		$aResult[3] = Round( StringReplace( $aResult[3], ",", "." ), 2 )
        If $aResult[1] < $aInfo[$iIndex][2] Or $aResult[3] < $aInfo[$iIndex][2] Then
            $aRet[0] = $aResult[1]
            $aRet[1] = $aResult[3]

            Return $aRet
        EndIf
    EndIf

    Return False
EndFunc
; ---
Func __Quit()
	HotKeySet( "{F6}" )
	HotKeySet( "{F7}" )
    AdlibUnRegister( "__CheckMain" )
    ;---
    Local $hFile, $sWrite, $Idx
    ; << Save File
    If MsgBox( 36, "Warning", "Save info?" ) = 6 Then
        For $Idx = 1 To $aInfo[0][0] Step 1
            $sWrite &= $aInfo[$Idx][1] & ";" & $aInfo[$Idx][2]
            If $Idx < $aInfo[0][0] then _
                $sWrite &= @CRLF
        Next
        ; ---
        $hFile = FileOpen( $sFile, 2 )
        FileWrite( $hFile, $sWrite )
        FileClose( $hFile )
    EndIf
    ; ---
    Exit
EndFunc


Код:
3504157372;200
3131422823;200.99

Не путайте запятую на сайте с точкой в файле, тут нужна именно точка.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Я так и делал.

Не срабатывает.

Вот нашёл хороший пример с этим номером
3642346715;79.98
А цена на сайте 79,97 и не срабатывает.

Срабатывает только когда например
3642346715;80
А цена на сайте 79,97

И при перезаписи цены с фале, сохраняется только целое число например пишу 79.98 а сохраняется просто 79

Следовательно программа округляет и когда я в текстовом файле даже сам указываю 79.98 то она видит как просто 79
 

firex

AutoIT Гуру
Сообщения
943
Репутация
206
Dk [?]
Вот нашёл хороший пример с этим номером3642346715;79.98А цена на сайте 79,97 и не срабатывает.
У меня - срабатывает.

И при перезаписи цены В фале, сохраняется только целое число например пишу 79.98 а сохраняется просто 79
И сохраняет нормально.

Только что проверил лично.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Мистика.
Теперь работает... :whistle:
У меня нет слов.
Я извиняюсь очень :-[

ОГРОМНОЕ СПАСИБО ВАМ :IL_AutoIt_1: :IL_AutoIt_1: :IL_AutoIt_1:
 
Верх