#include <Array.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>
Opt('GUIOnEventMode', 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 3)
Local $sFile2GTime, $iCount, $asText1, $asText2, $sFile1Size, $hGUI, $hListView, $nCh1, $hButt1, $hButt2, $hButt3, $hButt4, $hGUIState, $hExit, $sLVText
Local $sFile1SizePrev = 0, $iIndex = 0, $sFile1 = @ScriptDir & '\1.txt', $hFile1, $sFile2 = @ScriptDir & '\2.txt'
$hGUI = GUICreate('Статистика:', 635, 210, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0xB9D1EA)
$hListView = GUICtrlCreateListView('ASIN-10 |Price[New]|Price[Old]|SalesRank|Name|Date & Time', 5, 5, 625, 170, _
$LVS_NOSORTHEADER, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP))
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Opt("GUIResizeMode", $GUI_DOCKSTATEBAR)
$nCh1 = GUICtrlCreateCheckbox('Автоотправка Email', 255, 183, 120, 20)
$hButt1 = GUICtrlCreateButton('Скопировать все', 10, 180, 100, 25)
$hButt2 = GUICtrlCreateButton('Отправить Email', 130, 180, 100, 25)
$hButt3 = GUICtrlCreateButton('Очистить список', 390, 183, 100, 20)
$hButt4 = GUICtrlCreateButton('Выйти из программы', 510, 183, 120, 20)
$hGUIState = TrayCreateItem('Отобразить/Скрыть Окно')
TrayCreateItem('')
$hExit = TrayCreateItem('Выход')
GUISetOnEvent($GUI_EVENT_CLOSE, '_CLOSEClicked')
GUICtrlSetOnEvent($hButt1, '_ListViewCopy')
GUICtrlSetOnEvent($hButt3, '_ListViewClear')
GUICtrlSetOnEvent($hButt4, '_Exit')
TrayItemSetOnEvent($hGUIState, '_CLOSEClicked')
TrayItemSetOnEvent($hExit, '_Exit')
#cs ===== Этот блок приостанавливает скрипт пока "1.txt" не будет очищен =====
Do
Sleep(250)
$sFile1Size = FileGetSize($sFile1)
If $sFile1SizePrev < $sFile1Size Then $sFile1SizePrev = $sFile1Size
Until $sFile1SizePrev > $sFile1Size
$sFile1SizePrev = 0
#ce ===========================================================================
GUISetState(@SW_HIDE)
$sFile2GTime = FileGetTime($sFile2, 0, 1)
_FilesOpen_Reads(1)
While 1
While 1
$sFile1Size = FileGetSize($sFile1)
Select
Case $sFile1SizePrev < $sFile1Size
$sFile1SizePrev = $sFile1Size
Case $sFile1SizePrev > $sFile1Size
$sFile1SizePrev = 0
_FilesOpen_Reads(0)
EndSelect
$asText1 = StringRegExp(FileReadLine($hFile1), '^"(\w{10,12})"\t"(?:.+?)"(?:\t[\d\,N/A]+)\t([\d\,N/A]+)(?:\t[\d\,N/A]+\t.+?"?)(?:\t[\d\,N/A]+){3}\t([\d\,N/A]+)\t', 3)
If @error = 0 Then ExitLoop
Sleep(50)
WEnd
If $iCount >= UBound($asText2) Then ContinueLoop
If $asText1[0] <> $asText2[$iCount] Then
$iIndex = _ArraySearch($asText2, $asText1[0], $iIndex, 0, 0, 1)
If Not @error Then $iCount = $iIndex
EndIf
If $asText1[1] <> 'N/A' And $asText2[$iCount + 2] <> 'N/A' Then
If StringReplace($asText2[$iCount + 2], ',', '.') / StringReplace($asText1[1], ',', '.') >= 2 And $asText1[2] < 300000 Then
$sLVItemText = $asText1[0] & '|' & $asText1[1] & '|' & $asText2[$iCount + 2] & '|' & $asText1[2] & '|' & _
$asText2[$iCount + 1] & '|' & @MDAY & '/' & @MON & '/' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC
GUICtrlCreateListViewItem($sLVItemText, $hListView)
GUISetState(@SW_SHOWNORMAL)
;SoundPlay(@WindowsDir & '\media\Windows Ringin.wav') ; Отключил пока, для чистоты эксперимента
$sLVText &= $sLVItemText & '|' & @CRLF
EndIf
EndIf
; ===== Эта строка только для тестов (не забудьте ее потом удалить)======================================
ConsoleWrite($iCount / 3 & ' (Сравниваем ASIN: ' & $asText1[0] & ' и ' & $asText2[$iCount] & ')' & @CRLF)
; =======================================================================================================
$iCount += 3
WEnd
Func _FilesOpen_Reads($iFirstStart)
Local $sF2GT, $i = 0
$iCount = 0
$asText2 = 0
If Not $iFirstStart Then
FileClose($hFile1)
While 1
$i += 1
$sF2GT = FileGetTime($sFile2, 0, 1)
If $sF2GT > $sFile2GTime Then
$sFile2GTime = $sF2GT
ExitLoop
EndIf
If $i >= 60 Then Exit MsgBox(16, 'Ошибка!', 'Файл "2.txt" не обновился.' & @LF & 'Программа будет закрыта.')
Sleep(100)
WEnd
EndIf
For $i = 0 To 30
$hFile1 = FileOpen($sFile1)
If $hFile1 <> -1 Then ExitLoop
Sleep(100)
Next
If $hFile1 = -1 Then Exit MsgBox(16, 'Ошибка!', 'Неудалось открыть файл "1.txt".')
For $i = 0 To 30
$asText2 = StringRegExp(FileRead($sFile2), '\n"(\w{10,12})"\t"(.+?)"(?:\t[\d\,N/A]+?)\t([\d\,N/A]+)\t.+', 3)
If Not @error Then Return
Sleep(100)
Next
MsgBox(16, 'Ошибка!', 'Не удалось открыть или корректно прочитать файл "2.txt".')
_Exit()
EndFunc ;==>_FilesOpen_Reads
Func _CLOSEClicked()
GUISetState(BitAND(WinGetState($hGUI), 2) ? @SW_HIDE : @SW_SHOWNORMAL)
EndFunc ;==>_CLOSEClicked
Func _ListViewCopy()
ClipPut($sLVText)
EndFunc ;==>_ListViewCopy
Func _ListViewClear()
GUICtrlSendMsg($hListView, $LVM_DELETEALLITEMS, 0, 0)
$sLVText = ''
EndFunc ;==>_ListViewClear
Func _Exit()
If $hFile1 Then FileClose($hFile1)
Exit
EndFunc ;==>_Exit