ra4o
AutoIT Гуру
- Сообщения
- 1,165
- Репутация
- 247
Возможно извращение, но мой вариант используя Excel
После запуска постоянно считывает содержимое файла 1.txt и сравнивает его содержимое с файлом 2.txt, но не сначала, а только вновь добавленные строки, при перезаписи файла счётчик строк обнуляется и всё заново, результат пишет в консоль( пока для теста). Выход - кнопка "q"
Из минусов, то , что хоть файл 1.txt сравнивает только "свежие" строки, но он перезаписывается в массив всё время весь целиком.
Но при этом считывание файла в массив при помощи Excel гораздо быстрее, чем читать текстовый файл построчно.
После запуска постоянно считывает содержимое файла 1.txt и сравнивает его содержимое с файлом 2.txt, но не сначала, а только вновь добавленные строки, при перезаписи файла счётчик строк обнуляется и всё заново, результат пишет в консоль( пока для теста). Выход - кнопка "q"
Код:
#include <File.au3>
#include <Array.au3>
#include <Excel.au3>
Global $aArray1, $aArray2
HotKeySet('q', '_Stop')
Global $sFile1 = @ScriptDir & '\1.txt'
Global $sFile2 = @ScriptDir & '\2.txt'
Global $oExcel = _Excel_Open(False)
$hFile2 = _Excel_BookOpen($oExcel, $sFile2)
If @error Then MsgBox(48, '@error', @error)
$aArray2 = _Excel_RangeRead($hFile2)
_Excel_BookClose($hFile2)
If @error Then MsgBox(48, '@error', @error)
Global $iMaxIndex = 1
;_ArrayDisplay($aArray1)
While 1
_Start()
Sleep(20)
WEnd
Func _Start()
$hFile1 = _Excel_BookOpen($oExcel, $sFile1)
If @error Then MsgBox(48, '@error', @error)
$aArray1 = _Excel_RangeRead($hFile1)
_Excel_BookClose($hFile1)
If @error Then MsgBox(48, '@error', @error)
$MaxArray1 = UBound($aArray1) - 1
If $MaxArray1 > 0 Then
If $iMaxIndex > $MaxArray1 Then;Если файл 1 начат заново и переписан файл 2
$iMaxIndex = 1
$hFile2 = _Excel_BookOpen($oExcel, $sFile2)
If @error Then MsgBox(48, '@error', @error)
$aArray2 = _Excel_RangeRead($hFile2)
_Excel_BookClose($hFile2)
If @error Then MsgBox(48, '@error', @error)
EndIf
For $i = $iMaxIndex To $MaxArray1
If $iMaxIndex < $i Then $iMaxIndex = $i
If $aArray1[$i][3] <> 'N/A' And $aArray1[$i][3] = $aArray2[$i][3] / 2 And $aArray1[$i][9] < 300000 Then
ConsoleWrite($aArray1[$i][1] & @CRLF)
EndIf
Next
EndIf
EndFunc ;==>_Start
Func _Stop()
_Excel_Close($oExcel)
Exit
EndFunc ;==>_Stop
Но при этом считывание файла в массив при помощи Excel гораздо быстрее, чем читать текстовый файл построчно.