Tyr
Новичок
- Сообщения
- 43
- Репутация
- 4
Версия AutoIt:3.3.8.1
Описание:
Необходимо производить поиск строк в которых заполнен вид данных, но, отсутствуют сами данные (т.е. заполненная строка выглядит так: "ДатаДок: 11.01.12", а не заполненная: "ИННПП:"), и в случае обнаружения такой строки создавать файл с таким же именем как и проверяемый файл, но с разрешением .log.
Файл *log (в идеале) должен содержать:
№ строки начала блока в котором найдены пропущенные данные(блоки в текстовых файлах разделены "#"), Наименование пропущеного блока, ДатаОпер, НомДок, Дебет, Кредит
Данные пропуск которых необходимо проверять: 'НаимБП:', 'БИКБП:', 'НаимПП:', 'ИННПП:', 'НомСчПП:', 'НазнПл:'
Примечания:
madmasles, изменил и оптимизировал мой первоначальный код самой проверки на наличие пустых строк и сделал вывод в _ArrayDisplay :
Так же вот мой изначальный код, который выбирал файлы по маске и последовательно выполнял их обработку:
Выкладываю несколько файлов для обработки
Описание:
Необходимо производить поиск строк в которых заполнен вид данных, но, отсутствуют сами данные (т.е. заполненная строка выглядит так: "ДатаДок: 11.01.12", а не заполненная: "ИННПП:"), и в случае обнаружения такой строки создавать файл с таким же именем как и проверяемый файл, но с разрешением .log.
Файл *log (в идеале) должен содержать:
№ строки начала блока в котором найдены пропущенные данные(блоки в текстовых файлах разделены "#"), Наименование пропущеного блока, ДатаОпер, НомДок, Дебет, Кредит
Данные пропуск которых необходимо проверять: 'НаимБП:', 'БИКБП:', 'НаимПП:', 'ИННПП:', 'НомСчПП:', 'НазнПл:'
Примечания:
madmasles, изменил и оптимизировал мой первоначальный код самой проверки на наличие пустых строк и сделал вывод в _ArrayDisplay :
Код:
#include <Encoding.au3>
#include <Array.au3>
Local $s_File = @ScriptDir & '\BV201_ZNO3434343.txt'
Local $a_Search[15] = [14, 'ДатаОпер:', 'ВидДок:', 'НомДок:', 'ДатаДок:', 'НомКорСч:', 'НаимБП:', 'БИКБП:', 'НаимПП:', 'ИННПП:', 'КПППП:', 'НомСчПП:', _
'Дебет:', 'Кредит:', 'НазнПл:'], $v_Tmp, $a_Str, $a_Ret[1], $a_Tmp[$a_Search[0] + 1], $i_Len
Local $i_Timer = TimerInit()
$i_Len = StringLen($a_Search[1])
$v_Tmp = StringStripCR(_Encoding_OEM2ANSI(FileRead($s_File)))
For $i = 1 To $a_Search[0]
If StringInStr($v_Tmp, $a_Search[$i] & @LF, 1) Then
;~ If StringRegExp($v_Tmp, '(?m)^' & $a_Search[$i] & '$') Then
$a_Tmp[0] += 1
$a_Tmp[$a_Tmp[0]] = $i
EndIf
Next
If Not $a_Tmp[0] Then Exit MsgBox(64, '', 'All OK!')
$a_Str = StringSplit($v_Tmp, @LF)
$v_Tmp = 0
ReDim $a_Ret[$a_Str[0] + 1][$a_Tmp[0]]
For $i = 1 To $a_Str[0]
For $j = 0 To $a_Tmp[0] - 1
If $a_Str[$i] == $a_Search[$a_Tmp[$j + 1]] Then
$a_Ret[0][$j] += 1
;~ $a_Ret[$a_Ret[0][$j]][$j] = $i
;~ $a_Ret[$a_Ret[0][$j]][$j] = $i & ' (' & $a_Str[$i - $a_Tmp[$j + 1] + 1] & ')'
$a_Ret[$a_Ret[0][$j]][$j] = $i & ' (' & StringTrimLeft($a_Str[$i - $a_Tmp[$j + 1] + 1], $i_Len) & ')'
;~ ConsoleWrite($a_Str[$i - $a_Tmp[$j + 1] + 1] & @LF)
EndIf
Next
Next
For $i = 0 To $a_Tmp[0] - 1
If $v_Tmp < $a_Ret[0][$i] Then $v_Tmp = $a_Ret[0][$i]
$a_Ret[0][$i] = $a_Search[$a_Tmp[$i + 1]] & ' (' & $a_Ret[0][$i] & ')'
Next
ReDim $a_Ret[$v_Tmp + 1][$a_Tmp[0]]
ConsoleWrite(TimerDiff($i_Timer) & @LF)
_ArrayDisplay($a_Ret)
Так же вот мой изначальный код, который выбирал файлы по маске и последовательно выполнял их обработку:
Код:
#include <Array.au3>
#Include <File.au3> ;подключаем необходимые библиотеки
$dirIz = "C:\Users\Администратор\Desktop\bnb\test" ;задаем рабочую папку как переменну.
; проверяемые поля:
$dataOper = '„ в ЋЇҐа:'
$dataOperlen = StringLen($dataOper)
$vidDoc = '‚Ё¤„®Є:'
$vidDoclen = StringLen($vidDoc)
$nomDoc = 'Ќ®¬„®Є:'
$nomDoclen = StringLen($nomDoc)
$dataDoc = '„ в „®Є:'
$dataDoclen = StringLen($dataDoc)
$nomKS = 'Ќ®¬Љ®а‘з:'
$nomKSlen = StringLen($nomKS)
$naimBP = 'Ќ Ё¬ЃЏ:'
$naimBPlen = StringLen($naimBP)
$bicBP = 'Ѓ€ЉЃЏ:'
$bicBPlen = StringLen($bicBP)
$naimPP = 'Ќ Ё¬ЏЏ:'
$naimPPlen = StringLen($naimPP)
$iNNPP = '€ЌЌЏЏ:'
$iNNPPlen = StringLen($iNNPP)
$nomScPP = 'Ќ®¬‘зЏЏ:'
$nomScPPlen = StringLen($nomScPP)
$deb = '„ҐЎҐв:'
$debLen = StringLen($deb)
$kred = 'ЉаҐ¤Ёв:'
$kredLen = StringLen($kred)
$NaznP = 'Ќ §Џ«:'
$NaznPLen = StringLen($NaznP)
; цикл проверки наличия файлов и получения их имен для цикла проверки самих файлов.
If FileExists($dirIz & '\BV*ZNO1*') Then ;проверяем наличие файла отвечающего маске
$aA = _FileListToArray($dirIz, 'BV*ZNO1*', 1);записываем имена файлов в массив
for $ii = 1 to $aA[0];запускаем цикл по длине массива
; MsgBox(4096,"", $aA[$ii])
_ProvercaStroc($aA[$ii]) ;Запускае основую процедуру которая внизу кода передавая параметры . элемент массива(имя файла) считывается в переменную
next
Else
MsgBox(4096,"","Нет файлов для обработки.")
EndIf
; Процедура поиска пустых значений напротив поля.
Func _ProvercaStroc($fileName)
$stroca = ''
$logRez = ''
$i = 0
$j = 0
Dim $aStrocMas[1] ; определил массв
$hFile = FileOpen($dirIz & "\" & $fileName, 0);открываемый файл
While 1 ; бесконечный цикл
$i += 1
$stroca = FileReadLine($hFile, $i) ;считываю построчно строки файла в переменную STROCA
If @error = -1 Then ExitLoop ;выхожу из цикла если строк больше нет
$len = StringLen($stroca) ;замеряю длину строки
;проверка входа подстроки с нужным текстом в эту строку и выписывает строку если длина строки равна пустой искомой строкое
If (StringInStr($stroca, $dataOper) and $len = $dataOperlen) _ ;этот параметр по экспериментам не отсутствует
or (StringInStr($stroca, $vidDoc) and $len = $vidDoclen) _ ;этот параметр по экспериментам не отсутствует
or (StringInStr($stroca, $nomDoc) and $len = $nomDoclen) _ ;этот параметр по экспериментам не отсутствует
or (StringInStr($stroca, $dataDoc) and $len = $dataDoclen) _ ;этот параметр по экспериментам не отсутствует or (StringInStr($stroca, $nomKS) and $len = $nomKSlen) _ ;Часто отсутствует - но налоговая на это не ругается
or (StringInStr($stroca, $naimBP) and $len = $naimBPlen) _ ;Иногда отсутствует
or (StringInStr($stroca, $bicBP) and $len = $bicBPlen) _ ;Иногда нет
or (StringInStr($stroca, $naimPP) and $len = $naimPPlen) _ ;Часто отсутствует
or (StringInStr($stroca, $iNNPP) and $len = $iNNPPlen) _ ;Иногда отсутствует
or (StringInStr($stroca, $nomScPP) and $len = $nomScPPlen) _ ;этот параметр по экспериментам не отсутствует
or (StringInStr($stroca, $deb) and $len = $debLen) _ ;этот параметр по экспериментам не отсутствует
or (StringInStr($stroca, $kred) and $len = $kredLen) _ ;этот параметр по экспериментам не отсутствует
or (StringInStr($stroca, $NaznP) and $len = $NaznPLen) _ ;Иногда отсутствует
Then
$j += 1
ReDim $aStrocMas[$j + 1]
$aStrocMas[$j] = $i
$logRez = $logRez & ' ' & ' ' & $i & ','
EndIf
WEnd
FileClose($hFile)
If Not $j Then
MsgBox(0, $fileName, 'Отсутствующих данных не найдено.')
Else
MsgBox(0, $fileName, 'Данные пропущены в ' & $j & ' строках ' & @CR & @CR & $logRez )
EndIf
FileClose($dirIz & "\" & $fileName)
EndFunc