Что нового

[Данные, строки] Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

A

Alofa

Гость
Re: [Данные, строки] Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Dk сказал(а):
Уже нет.


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

Доработанный Вариант №1
Код:
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>

Opt('GUIOnEventMode', 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 3)

Local $iFile2GTime, $asText1, $asText2, $sText2, $sFile1Size, $hGUI, $hListView, $nCh1, $hButt1, $hButt2, $hButt3, $hButt4, $hGUIState, $hExit, $sLVText
Local $sFile1SizePrev = 0, $iOffset = 1, $hFile1, $sFile1 = @ScriptDir & '\1.txt', $sFile2 = @ScriptDir & '\2.txt'

$hGUI = GUICreate('Статистика:', 635, 280, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0xB9D1EA)
$hListView = GUICtrlCreateListView('ASIN-10  |Price[New]|Price[Old]|SalesRank|Name|Date & Time', 5, 5, 625, 240, _
		$LVS_NOSORTHEADER, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP))
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Opt("GUIResizeMode", $GUI_DOCKSTATEBAR)
$nCh1 = GUICtrlCreateCheckbox('Автоотправка Email', 255, 253, 120, 20)
$hButt1 = GUICtrlCreateButton('Скопировать все', 10, 250, 100, 25)
$hButt2 = GUICtrlCreateButton('Отправить Email', 130, 250, 100, 25)
$hButt3 = GUICtrlCreateButton('Очистить список', 390, 253, 100, 20)
$hButt4 = GUICtrlCreateButton('Выйти из программы', 510, 253, 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')

GUISetState(@SW_HIDE)

$iFile2GTime = 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 Then
			Sleep(50)
			ContinueLoop
		EndIf
		For $i = 0 To 1
			$asText2 = StringRegExp($sText2, '\v' & $asText1[0] & '\|([\d\,N/A]+)\|(.+?)\|', 1, $iOffset)
			If @error Then
				$iOffset = 1
			Else
				$iOffset = @extended
				ExitLoop 2
			EndIf
		Next
		If @error Then ContinueLoop
	WEnd
	If $asText1[1] <> 'N/A' And $asText2[0] <> 'N/A' Then
;~ 		If Number(StringReplace($asText2[0], ',', '.')) / Number(StringReplace($asText1[1], ',', '.')) >= 2 And Number($asText1[2]) < 300000 Then
		If Number(StringReplace($asText2[0], ',', '.')) > Number(StringReplace($asText1[1], ',', '.')) And Number($asText1[2]) < 30000000 Then
			$sLVItemText = $asText1[0] & '|' & $asText1[1] & '|' & $asText2[0] & '|' & $asText1[2] & '|' & _
					$asText2[1] & '|' & @MDAY & '/' & @MON & '/' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC
			GUICtrlCreateListViewItem($sLVItemText, $hListView)
			GUISetState(@SW_SHOWNORMAL)
			;SoundPlay(@WindowsDir & '\media\Windows Ringin.wav') ; Отключил пока, для чистоты эксперимента
			$sLVText &= $sLVItemText & '|' & @CRLF
		EndIf
	EndIf
WEnd

Func _FilesOpen_Reads($iFirstStart)
	Local $iF2GT, $i = 0
	$sText2 = ''
	If Not $iFirstStart Then
		FileClose($hFile1)
		While 1
			$i += 1
			$iF2GT = FileGetTime($sFile2, 0, 1)
			If $iF2GT > $iFile2GTime Then
				$iFile2GTime = $iF2GT
				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".' & @LF & 'Программа будет закрыта.')
	For $i = 0 To 30
		$sText2 = StringRegExpReplace(FileRead($sFile2), '\n"(\w{10,12})"\t"(.+?)"(?:\t[\d\,N/A]+?)\t([\d\,N/A]+)\t.+', '${1}|${3}|${2}|')
		If Not @error Then Return
		Sleep(100)
	Next
	MsgBox(16, 'Ошибка!', 'Не удалось открыть или прочитать файл "2.txt".' & @LF & 'Программа будет закрыта.')
	_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
Он скоростней, но уступает Варианту №2.

К примеру с одними и теми же файлами Вариант №1 справился за 33.5 сек., Вариант №2 за 1.62 сек., а этот за 9.88 сек.
Вот сижу и думаю, на каком остановиться?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa сказал(а):
К примеру с одними и теми же файлами Вариант №1 справился за 33.5 сек., Вариант №2 за 1.62 сек., а этот за 9.88 сек.
Вот сижу и думаю, на каком остановиться?

Столько вариантов, что я не успеваю тестить

Тестирую параллельно сразу две. Первая работает отлично, всё работает. Вторая версия никак не реагирует. Первая показывает, совпадения, вторая мочит.
Сааамую последнюю 3-ию , я не тестил ещё
Везде поставил
Код:
If Number(StringReplace($asText2[1], ',', '.')) > Number(StringReplace($asText1[1], ',', '.'))  And Number($asText1[2]) < 30000000 Then

Прошу сразу писать скрипт с таким условием. Что бы мне не перебивать. каждый раз при тестировании. :-[
Впринципе я доволен и первой версией, она успевает, работает стабильно. Но если хочется совершенства, то я не против. Я протестирую все)
Гланвое что бы остался запал для отправки на E-Mail :-[ :-[ :-[
Третья версия при том же условии, выдаёт всегда совпадения с одинаковыми ценами.
 
A

Alofa

Гость
Re: Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Dk сказал(а):
... Везде поставил
Код:
If Number(StringReplace($asText2[1], ',', '.')) > Number(StringReplace($asText1[1], ',', '.'))  And Number($asText1[2]) < 30000000 Then
Вот прямо такое и везьде?
Изменил условие во всех вариантах (но оставил старое для себя), проверьте так ли у вас?
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa
Я немного запутался )
1) Первый Вариант - Работает
2) Первый доработанный -Работает
3) Остальные я не понимаю какой есть какой. Но я предлагаю остановиться на ''первом доработанном''. :beer:

Давайте теперь прикрутим Емайл :-[ :-[ :-[
Ильдар вроде прикрутил емайл, но сам скрипт не работал (поиск - сравненеи). Подсмотрите у него если что.
 
A

Alofa

Гость
Re: Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Dk сказал(а):
Давайте теперь прикрутим Емайл :-[ :-[ :-[

Пункт В4 Общих правил:
4. Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.

Пункт Б6 Общих правил:
6. Запрещается создание тем охватывающих сразу несколько вопросов (например, создавать тему с вопросом сразу по нескольким функциям), название темы точно должно отражать её содержание.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa сказал(а):
Пункт В4 Общих правил:
4. Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.

Пункт Б6 Общих правил:
6. Запрещается создание тем охватывающих сразу несколько вопросов (например, создавать тему с вопросом сразу по нескольким функциям), название темы точно должно отражать её содержание.
Открыл новую тему.
Эту тему помечу как решённую.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Я понимаю тема решена уже, но в процессе работы я выяснил, что мне также необходимы столбики 3 и 5.
Буду благодарен, если для них напишите регулярные вырaжения (выводить их никуда не нужно)
просто 2 строки StringRegExp.
Пожалуйста
 
A

Alofa

Гость
Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Dk сказал(а):
... мне также необходимы столбики 3 и 4.
Вы это хотите использовать в данном скрипте, но без вывода?

Dk сказал(а):
... просто 2 строки StringRegExp.
Вазможно и 1 строкой, даже легче.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa сказал(а):
Вы это хотите использовать в данном скрипте, но без вывода?

Ну я что бы время не занимать Ваше. :-[ А так бы я просто дописал к отправке на Е-Майл и всё.
Пс и в некоторых местах происходит смещение Ranga (я просто не замечал раньше, так как это было второстепенным). Смещение не по строкам, а по столбцам.
 
A

Alofa

Гость
Dk сказал(а):
... необходимы столбики 3 и 4.
Ну 4 мы уже знаем, а про 3-й переделаю регулярку.

Dk сказал(а):
... Смещение не по строкам, а по столбцам.
Опять нестандартная строка. Нужно как-то ее вычислить и предосиавить мне (ну или файлы).
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa сказал(а):
Ну 4 мы уже знаем, а про 3-й переделаю регулярку.

Нужно как-то ее вычислить и предосиавить мне (ну или файлы).

Я извиняюсь 5-ую и 3-ию надо.
Сейчас включу скрипт, что бы примеров набрать побольше. Напишу через пару часов

Вот примеры, где происходит смещение Ранга.
 

Вложения

  • rang.txt
    1.2 КБ · Просмотры: 7
A

Alofa

Гость
Dk это вам нужно из "1.txt"?

Собираюсь кардинально менять принцип фильтрования в регулярных выражениях, иначе подобные ошибки никогда не закончатся. А для этого нужно время.
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa сказал(а):
DkDk это вам нужно из "1.txt"?
Собираюсь кардинально менять принцип фильтрования в регулярных выражениях, иначе подобные ошибки никогда не закончатся. А для этого нужно время.
Из 1.тхт и 2.тхт
Ок. Будем ждать, очень.


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

Сделайте пожалуйста 5-ый столбец пока по старому варианту. А то я и так и этак и всё никак :'( :'(
 
A

Alofa

Гость
Dk читайте комментарии и пробуйте:
Код:
#include <Array.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>

Opt('GUIOnEventMode', 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 3)

Local $iFile2GTime, $asText1, $asText2, $sText2, $sFile1Size, $hGUI, $hListView, $nCh1, $hButt1, $hButt2, $hButt3, $hGUIState, $hExit, $sLVText
Local $iCheck = True, $sFile1SizePrev = 0, $iOffset = 1, $hFile1, $sFile1 = @ScriptDir & '\1.txt', $sFile2 = @ScriptDir & '\2.txt'

$hGUI = GUICreate('Статистика:', 615, 280, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0xB9D1EA)
$hListView = GUICtrlCreateListView('ASIN-10  |Old Price|New Price|SalesRank|Name|Date & Time', 5, 5, 605, 240, _
		$LVS_NOSORTHEADER, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP))
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Opt("GUIResizeMode", $GUI_DOCKSTATEBAR)
$hButt1 = GUICtrlCreateButton('Скопировать все', 30, 255, 100, 23)
$nCh1 = GUICtrlCreateCheckbox('АвтоОтправка E-mail', 170, 255, 120, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$hButt2 = GUICtrlCreateButton('Очистить список', 330, 255, 100, 23)
$hButt3 = GUICtrlCreateButton('Выйти из программы', 470, 255, 120, 23)
$hGUIState = TrayCreateItem('Отобразить/Скрыть Окно')
TrayCreateItem('')
$hExit = TrayCreateItem('Выход')
GUISetOnEvent($GUI_EVENT_CLOSE, '_CLOSEClicked')
GUICtrlSetOnEvent($hButt1, '_ListViewCopy')
GUICtrlSetOnEvent($nCh1, '_CheckboxState')
GUICtrlSetOnEvent($hButt2, '_ListViewClear')
GUICtrlSetOnEvent($hButt3, '_Exit')
TrayItemSetOnEvent($hGUIState, '_CLOSEClicked')
TrayItemSetOnEvent($hExit, '_Exit')

GUISetState(@SW_HIDE)

$iFile2GTime = 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), '"(.+?)"\t|[^\t]+', 3)
		If @error Or $asText1[0] == 'ASIN' Then
			Sleep(50)
			ContinueLoop
		EndIf
		For $i = 0 To 1
			$asText2 = StringRegExp($sText2, '\v' & $asText1[0] & '\|(.+?)\|(.+?)\|(.+?)\|', 1, $iOffset)
			If @error Then
				$iOffset = 1
			Else
				$iOffset = @extended
				ExitLoop 2
			EndIf
		Next
		If @error Then ContinueLoop
	WEnd
	
; === ЭТОТ БЛОК ТОЛЬКО ДЛЯ ДЕМОНСТРАЦИИ (НЕ ЗАБУДЬТЕ УДАЛИТЬ) ===
;	За один цикл мы извлекаем следующие данные из файлов:
		_ArrayDisplay($asText1, '"1.txt"')
		_ArrayDisplay($asText2, '"2.txt"')
; ===============================================================

	If $asText1[3] <> 'N/A' And $asText2[1] <> 'N/A' Then
;~ 		If Number(StringReplace($asText2[1], ',', '.')) / Number(StringReplace($asText1[3], ',', '.')) >= 2 And Number($asText1[9]) < 300000 Then
		If Number(StringReplace($asText2[1], ',', '.')) > Number(StringReplace($asText1[3], ',', '.')) And Number($asText1[9]) < 30000000 Then
			$sLVItemText = $asText1[0] & '|' & $asText2[1] & '|' & $asText1[3] & '|' & $asText1[9] & '|' & _
					$asText1[1] & '|' & @MDAY & '/' & @MON & '/' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC
			GUICtrlCreateListViewItem($sLVItemText, $hListView)
			GUISetState(@SW_SHOWNORMAL)
			;SoundPlay(@WindowsDir & '\media\Windows Ringin.wav') ; Отключил пока, для чистоты эксперимента
			$sLVText &= $sLVItemText & '|' & @CRLF
		EndIf
	EndIf
WEnd

Func _FilesOpen_Reads($iFirstStart)
	Local $iF2GT, $i = 0
	$sText2 = ''
	If Not $iFirstStart Then
		FileClose($hFile1)
		While 1
			$i += 1
			$iF2GT = FileGetTime($sFile2, 0, 1)
			If $iF2GT > $iFile2GTime Then
				$iFile2GTime = $iF2GT
				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".' & @LF & 'Программа будет закрыта.')
	For $i = 0 To 30
		$sText2 = StringRegExpReplace(FileRead($sFile2), '\n"(\w{10,12})"\t".+?"\t([\d,N/A]+)\t([\d,N/A]+)\t([\d,N/A]+)\t.+', '${1}|${2}|${3}|${4}|')
		If Not @error Then Return
		Sleep(100)
	Next
	MsgBox(16, 'Ошибка!', 'Не удалось открыть или прочитать файл "2.txt".' & @LF & 'Программа будет закрыта.')
	_Exit()
EndFunc   ;==>_FilesOpen_Reads

Func _CLOSEClicked()
	GUISetState(BitAND(WinGetState($hGUI), 2) ? @SW_HIDE : @SW_SHOWNORMAL)
EndFunc   ;==>_CLOSEClicked

Func _CheckboxState()
	$iCheck = Not $iCheck
EndFunc   ;==>_CheckboxState

Func _ListViewCopy()
	ClipPut($sLVText)
	ToolTip('Список скопирован в буфер обмена.', Default, Default, 'Сообщение.', 1, 7)
	Sleep(900)
	ToolTip('')
EndFunc   ;==>_ListViewCopy

Func _ListViewClear()
	GUICtrlSendMsg($hListView, $LVM_DELETEALLITEMS, 0, 0)
	$sLVText = ''
EndFunc   ;==>_ListViewClear

Func _Exit()
	If $hFile1 Then FileClose($hFile1)
	Exit
EndFunc   ;==>_Exit


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

Dk ваша Другая тема еще актуальна?
Если да, то в свете последних событий данной темы, как должен выглядеть образец письма?
OffTopic:
Даже и не знаю где вам лучше ответить? :stars:
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: Сравнение строк в столбцах в текстовом файле с разделителем - табуляция

Alofa сказал(а):
Dk читайте комментарии и пробуйте:
Код:
#include <Array.au3>
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <GUIConstantsEx.au3>

Opt('GUIOnEventMode', 1)
Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 3)

Local $iFile2GTime, $asText1, $asText2, $sText2, $sFile1Size, $hGUI, $hListView, $nCh1, $hButt1, $hButt2, $hButt3, $hGUIState, $hExit, $sLVText
Local $iCheck = True, $sFile1SizePrev = 0, $iOffset = 1, $hFile1, $sFile1 = @ScriptDir & '\1.txt', $sFile2 = @ScriptDir & '\2.txt'

$hGUI = GUICreate('Статистика:', 615, 280, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0xB9D1EA)
$hListView = GUICtrlCreateListView('ASIN-10  |Old Price|New Price|SalesRank|Name|Date & Time', 5, 5, 605, 240, _
		$LVS_NOSORTHEADER, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES, $LVS_EX_HEADERDRAGDROP))
GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
Opt("GUIResizeMode", $GUI_DOCKSTATEBAR)
$hButt1 = GUICtrlCreateButton('Скопировать все', 30, 255, 100, 23)
$nCh1 = GUICtrlCreateCheckbox('АвтоОтправка E-mail', 170, 255, 120, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$hButt2 = GUICtrlCreateButton('Очистить список', 330, 255, 100, 23)
$hButt3 = GUICtrlCreateButton('Выйти из программы', 470, 255, 120, 23)
$hGUIState = TrayCreateItem('Отобразить/Скрыть Окно')
TrayCreateItem('')
$hExit = TrayCreateItem('Выход')
GUISetOnEvent($GUI_EVENT_CLOSE, '_CLOSEClicked')
GUICtrlSetOnEvent($hButt1, '_ListViewCopy')
GUICtrlSetOnEvent($nCh1, '_CheckboxState')
GUICtrlSetOnEvent($hButt2, '_ListViewClear')
GUICtrlSetOnEvent($hButt3, '_Exit')
TrayItemSetOnEvent($hGUIState, '_CLOSEClicked')
TrayItemSetOnEvent($hExit, '_Exit')

GUISetState(@SW_HIDE)

$iFile2GTime = 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), '"(.+?)"\t|[^\t]+', 3)
		If @error Or $asText1[0] == 'ASIN' Then
			Sleep(50)
			ContinueLoop
		EndIf
		For $i = 0 To 1
			$asText2 = StringRegExp($sText2, '\v' & $asText1[0] & '\|(.+?)\|(.+?)\|(.+?)\|', 1, $iOffset)
			If @error Then
				$iOffset = 1
			Else
				$iOffset = @extended
				ExitLoop 2
			EndIf
		Next
		If @error Then ContinueLoop
	WEnd
	
; === ЭТОТ БЛОК ТОЛЬКО ДЛЯ ДЕМОНСТРАЦИИ (НЕ ЗАБУДЬТЕ УДАЛИТЬ) ===
;	За один цикл мы извлекаем следующие данные из файлов:
		_ArrayDisplay($asText1, '"1.txt"')
		_ArrayDisplay($asText2, '"2.txt"')
; ===============================================================

	If $asText1[3] <> 'N/A' And $asText2[1] <> 'N/A' Then
;~ 		If Number(StringReplace($asText2[1], ',', '.')) / Number(StringReplace($asText1[3], ',', '.')) >= 2 And Number($asText1[9]) < 300000 Then
		If Number(StringReplace($asText2[1], ',', '.')) > Number(StringReplace($asText1[3], ',', '.')) And Number($asText1[9]) < 30000000 Then
			$sLVItemText = $asText1[0] & '|' & $asText2[1] & '|' & $asText1[3] & '|' & $asText1[9] & '|' & _
					$asText1[1] & '|' & @MDAY & '/' & @MON & '/' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC
			GUICtrlCreateListViewItem($sLVItemText, $hListView)
			GUISetState(@SW_SHOWNORMAL)
			;SoundPlay(@WindowsDir & '\media\Windows Ringin.wav') ; Отключил пока, для чистоты эксперимента
			$sLVText &= $sLVItemText & '|' & @CRLF
		EndIf
	EndIf
WEnd

Func _FilesOpen_Reads($iFirstStart)
	Local $iF2GT, $i = 0
	$sText2 = ''
	If Not $iFirstStart Then
		FileClose($hFile1)
		While 1
			$i += 1
			$iF2GT = FileGetTime($sFile2, 0, 1)
			If $iF2GT > $iFile2GTime Then
				$iFile2GTime = $iF2GT
				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".' & @LF & 'Программа будет закрыта.')
	For $i = 0 To 30
		$sText2 = StringRegExpReplace(FileRead($sFile2), '\n"(\w{10,12})"\t".+?"\t([\d,N/A]+)\t([\d,N/A]+)\t([\d,N/A]+)\t.+', '${1}|${2}|${3}|${4}|')
		If Not @error Then Return
		Sleep(100)
	Next
	MsgBox(16, 'Ошибка!', 'Не удалось открыть или прочитать файл "2.txt".' & @LF & 'Программа будет закрыта.')
	_Exit()
EndFunc   ;==>_FilesOpen_Reads

Func _CLOSEClicked()
	GUISetState(BitAND(WinGetState($hGUI), 2) ? @SW_HIDE : @SW_SHOWNORMAL)
EndFunc   ;==>_CLOSEClicked

Func _CheckboxState()
	$iCheck = Not $iCheck
EndFunc   ;==>_CheckboxState

Func _ListViewCopy()
	ClipPut($sLVText)
	ToolTip('Список скопирован в буфер обмена.', Default, Default, 'Сообщение.', 1, 7)
	Sleep(900)
	ToolTip('')
EndFunc   ;==>_ListViewCopy

Func _ListViewClear()
	GUICtrlSendMsg($hListView, $LVM_DELETEALLITEMS, 0, 0)
	$sLVText = ''
EndFunc   ;==>_ListViewClear

Func _Exit()
	If $hFile1 Then FileClose($hFile1)
	Exit
EndFunc   ;==>_Exit


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

Dk ваша Другая тема еще актуальна?
Если да, то в свете последних событий данной темы, как должен выглядеть образец письма?
OffTopic:
Даже и не знаю где вам лучше ответить? :stars:





OffTopic:
Спасибо вам огромное. Всё работает. Очень удобно с массивами всё.
Всё сделал, всё вывел.
Почту я уже сделал, поэтому Темы про отправку сообщений, я пометил как "Решена". В этой теме тоже вопросов больше уже нет. Разную мелочь я уже сделаю сам.
Спасибо ещё раз. :IL_AutoIt_1:
 
Верх