Что нового

[Автоматизация] Наименование файла в соответствии с определенной частью текста файла

Serge Kushnir

Новичок
Сообщения
1
Репутация
0
Версия AutoIt: v3.3.14.2
Описание:

Добрый день.
Нужен скрипт, который будет в содержащемся в PDF файле тексте, выискивать определенную область и называть файл в соответствии с ней.

Примечания:

Пример:
Есть скан договора с распознанным текстом.
Скрипт находит номер договора, и называет файл в соответствии с ним.
 

Malderin

Новичок
Сообщения
68
Репутация
1
Был бы документ в формате ворд или эксель, было бы проще, для них есть соответствующие udf. А вот с пдф я бы связываться не стал, как ковырять такие файлы честно даже и не знаю, геморойные они какие то.
Но даже если бы формат документов был, например, ворд, информации мало, нужен пример обозначения договора. Например - только цифры, или цифры и буквы, или цифры и буквы и спец символы какие нибудь, и т.п. - все возможные варианты обозначений короче говоря.
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
1. Использовать конвертер pdf в txt. Конвертировать все файлы, так как текст распознанный, значит внутри txt будет корректный текст
2. Бежим по списку файлов txt
Открываем файл и начинаем его читать построчно. Скорее всего номер договора находится сверху, как вариант ищем контекст "Договор №", и берем все что после него - это и будет номер договора
3. Переименовываем соответствующий файл PDF на номер договора.
4. Потом просто удалите все TXT-файлы

Вот такая концепция. В принципе не сложно, найдите только конвертер pdf в txt

Код:
#include <File.au3>
#include <Array.au3>

$aFile=_FileListToArray(@ScriptDir,'*.txt') ; Получить список TXT-файлов
;_ArrayDisplay($aFile)

For $i=1 To $aFile[0]
	$Numb=GetContractNumber(@ScriptDir&'\'&$aFile[$i])
	; Переименовываем PDF
	If StringLen($Numb)<>0 And $Numb<>'error' Then
		MsgBox(0,'',$Numb)
		; Изменить название файла PDF
;~ 		$PdfPath=@ScriptDir&'\'&StringLeft($aFile[$i], StringLen($aFile[$i])-4)&'.pdf'
;~ 		FileMove($PdfPath, @ScriptDir&'\'&$Numb&'.pdf')
	EndIf
Next


Func GetContractNumber($Path)
	Local $ContrNumb='error'
	$hFile=FileOpen($Path)
	; Бег по содержимому файла
	While 1
		$Line=FileReadLine($hFile)
		If @error Then ExitLoop
		$Pos=StringInStr($Line,'Договор №')
		If $Pos<>0 Then
			$ContrNumb=StringStripWS(StringMid($Line,$Pos+9),3)
			ExitLoop
		EndIf
	WEnd
	FileClose($hFile)
	Return $ContrNumb
EndFunc

Создайте любой файл txt, поместите туда текст, например "Договор № 567" , запустите скрипт, увидите номер договора "567"
 
Верх