#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
$filepath = ""
$fileselected = 0
OpenFile()
Func OpenFile()
Local Const $sMessage = "Выберите файл."
Local $sFileOpenDialog = FileOpenDialog($sMessage, @WindowsDir & "\", "Текст (*.txt)", $FD_FILEMUSTEXIST)
If @error Then
MsgBox($MB_SYSTEMMODAL, "", "Файл не выбран.")
$fileselected=0
FileChangeDir(@ScriptDir)
Else
FileChangeDir(@ScriptDir)
$filepath = $sFileOpenDialog
$sFileOpenDialog = StringReplace($sFileOpenDialog, "|", @CRLF)
$fileselected=1
EndIf
EndFunc
if ($fileselected=1) Then
$skip=0
$skiperror=0
$rowscounter=0
$rowinputcounter=0
$sTextFile = StringRegExpReplace(FileRead($filepath), @CRLF, '') ;убираем из текста символы переноса строк
;~ $a1=StringRegExp($sTextFile, "\<(.*?)\>", 3) ;вариант не учитывающий случайные открывающие теги
$a1=StringRegExp($sTextFile, "(?=[^\<]*\>)(.*?)\>", 3) ;вариант учитывающий случайные открывающие теги
Dim $aRes[UBound($a1)][25] ;задаем массив на количество обнаруженных записей по тегам
For $i = 0 to UBound($a1)-1
$ar = StringSplit($a1[$i], ";", 2);делим записи на блоки по разделителю
if UBound($ar)<>25 Then ;проверяем количество полученных блоков, в правильном варианте = 25
if UBound($ar)>20 Then ;сообщение, только если в строке больше 20 блоков - все что меньше, скорее всего из-за случайного тега
MsgBox(48,'Внимание!', 'Следующий учетный лист распознан некорректно' &@CRLF&'('&UBound($ar)&' записей вместо 25) и будет пропущен:'& @CRLF& @CRLF &$a1[$i]& @CRLF& @CRLF &'Повторите обработку учетного листа')
$skiperror=$skiperror+1 ;счетчик некорректных записей
EndIf
$skip=$skip+1 ;счетчик всех пропущенных строк
ContinueLoop ;пропускаем некорректную строку
EndIf
For $j=0 to 24 ;цикл внесения блоков в массив
if $j=23 and StringStripWS($ar[$j],3)='' Then ;проверяем поле 24, если оно пустое, запрашиваем данные и помещаем их в массив, убирая лишние пробелы в начале и в конце блока
$aRes[$i-$skip][$j]=InputBox("Уточнение данных","Запись: "&$aRes[$i-$skip][0] &" "&$aRes[$i-$skip][1]&" "&$aRes[$i-$skip][2]&@CRLF&@CRLF&"Номер","")
ElseIf $j=24 and StringStripWS($ar[$j],3)='' Then ;проверяем поле 25, если оно пустое, запрашиваем данные и помещаем их в массив, убирая лишние пробелы в начале и в конце блока
$aRes[$i-$skip][$j]=InputBox("Уточнение данных","Запись: "&$aRes[$i-$skip][0] &" "&$aRes[$i-$skip][1]&" "&$aRes[$i-$skip][2]&@CRLF&@CRLF&"Дата поступления материалов","")
Else
$aRes[$i-$skip][$j]=StringStripWS($ar[$j],3) ;помещаем блок в массив, убирая лишние пробелы в начале и в конце блока
EndIf
Next
$rowscounter=$rowscounter+1 ;счетчик обработанных строк
Next
MsgBox(64,'Выполнено!', 'Успешно распознано: '&$rowscounter&''& @CRLF& 'Пропущено некорректных: '&$skiperror& ''&''& @CRLF& 'Обнаружено ошибок: '&$skip-$skiperror& '') ;сообщаем результаты обработки
ReDim $aRes[$rowscounter][25] ;сжимаем массив, убирая пустые строки
_ArrayDisplay($aRes ,"Предварительный просмотр", Default, 32) ;предварительный просмотр результатов
if MsgBox($MB_YESNO, "Все правильно?", "Начать внесение данных?")=7 Then ;запрос на разрешение внесения записей в базу данных
MsgBox(48,'Отменено', 'Данные не внесены') ;
Exit
else
run ("C:\Program Files\программа\программа.exe")
$rowinputcounter=$rowinputcounter+1
;MsgBox($MB_SYSTEMMODAL, "", "Внесено записей: " & $rowinputcounter)
Next
MsgBox($MB_SYSTEMMODAL, "", "Обработка файла " & $filepath & " завершена." & @CRLF & "Всего внесено записей: " & $rowinputcounter)
EndIf
EndIf
Exit