Что нового

Поиск телфонных номеров в Word

bugmenot

Новичок
Сообщения
17
Репутация
0
Версия AutoIt: 3.3.8.1

Описание:
Есть каталог содержащий файлы Word, в которых встречаются телефонные номера (в основном, в формате 11 чисел без тире). Необходимо вынуть все телефонные номера и поместить их таблицу excel (1-й столбец - телефонный номер, 2-й столбец - имя doc, файла в котором был найден телефонный номер)
Примечания:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
bugmenot
Образец документа где?
 
Автор
B

bugmenot

Новичок
Сообщения
17
Репутация
0
К сожалению, все образцы на работе.
Информация в не формализованном виде.
Примерно, так:

бла-бла-бла р/с 30301810756006005400 бла-бла номер тлф 78432639761 бла-бла [email protected], skype: diman2008kzn
бла-бла-бла г.Казань, ул. Мардюкова, д.85, ООО «Рога и копыта»
бла-бла-бла звонить на 74732369543 - Воронеж, прислал товар, 380442818539 - отвечать, что не туда попали
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
bugmenot

Только на счет паттерна для StringRegExp не уверен(

Код:
#include <Array.au3>
#include <Excel.au3>
#include <FileOperations.au3>

$uArray = _Find()
$oExcel = _ExcelBookNew()

_ExcelSheetWriteFromArray($oExcel, $uArray, 1, 1, 1)


Func _Find()
	Local $aFind1[1], $aFind2, $oDOC, $doc, $sText
	Local $aFileList = _FO_FileSearch(@ScriptDir, '*doc')


	For $i = 1 To $aFileList[0]

		$oDOC = ObjCreate('Word.Application')
		$doc = $oDOC.Documents.Open($aFileList[$i])
		$sText = $doc.Content.Text
		$oDOC.quit(0)

		$aFind2 = StringRegExp($sText, '\D+(\d{11})\D+', 3)

		If IsArray($aFind2) Then
			For $j = 0 To UBound($aFind2) - 1
				$aFind2[$j] = $aFind2[$j] & '|||' & $aFileList[$i]
			Next

			_ArrayConcatenate($aFind1, $aFind2)
		EndIf
	Next

	Local $uArray[UBound($aFind1)][2]

	For $i = 1 To UBound($aFind1) - 1
		Local $aSplit = StringSplit($aFind1[$i], '|||', 1)
		$uArray[$i][0] = $aSplit[1]
		$uArray[$i][1] = $aSplit[2]
	Next

	Return ($uArray)


EndFunc   ;==>_Find


Func _ExcelSheetWriteFromArray($oExcel, ByRef $aArray, $iExcelStartRow = Default, $iExcelStartCol = Default, $iArrayStartRow = Default, $iArrayStartCol = Default, $iArrayEndRow = Default, $iArrayEndCol = Default)
	Local $iExcelEndRow = 1
	Local $iExcelEndCol = 1

	If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
	If UBound($aArray, 0) <> 2 Then Return SetError(2, 0, 0)
	If $iExcelStartRow = Default Then $iExcelStartRow = 1
	If $iExcelStartCol = Default Then $iExcelStartCol = 1
	If $iArrayStartRow = Default Then $iArrayStartRow = 0
	If $iArrayStartCol = Default Then $iArrayStartCol = 0
	If $iArrayEndRow = Default Then $iArrayEndRow = UBound($aArray) - 1
	If $iArrayEndCol = Default Then $iArrayEndCol = UBound($aArray, 2) - 1
	If $iExcelStartRow < 1 Then $iExcelStartRow = 1
	If $iExcelStartCol < 1 Then $iExcelStartCol = 1
	If $iArrayStartRow < 0 Then $iArrayStartRow = 0
	If $iArrayStartCol < 0 Then $iArrayStartCol = 0
	If $iArrayEndRow < $iArrayStartRow Then Return SetError(3, 1, 0)
	If $iArrayEndCol < $iArrayStartCol Then Return SetError(4, 1, 0)
	$iExcelEndRow = $iExcelStartRow + $iArrayEndRow - $iArrayStartRow
	$iExcelEndCol = $iExcelStartCol + $iArrayEndCol - $iArrayStartCol

	; Check if only part of the array is to written to the speadsheet
	If $iArrayStartRow <> 0 Or $iArrayStartCol <> 0 Or $iArrayEndRow <> UBound($aArray) - 1 Or $iArrayEndCol = UBound($aArray, 2) - 1 Then
		;Copy specified array range to a temporary array
		Local $aTemp[$iArrayEndRow - $iArrayStartRow + 1][$iArrayEndCol - $iArrayStartCol + 1]
		Local $iRow = 0
		Local $iCol = 0
		For $i = $iArrayStartRow To $iArrayEndRow
			$iCol = 0
			For $j = $iArrayStartCol To $iArrayEndCol
				$aTemp[$iRow][$iCol] = $aArray[$i][$j]
				$iCol += 1
			Next
			$iRow += 1
		Next
		With $oExcel.ActiveSheet
			.Range(.Cells($iExcelStartRow, $iExcelStartCol), .Cells($iExcelEndRow, $iExcelEndCol)).Select
			.Range(.Cells($iExcelStartRow, $iExcelStartCol), .Cells($iExcelEndRow, $iExcelEndCol)).value = $oExcel.Application.WorksheetFunction.Transpose($aTemp)
		EndWith
	Else
		With $oExcel.ActiveSheet
			.Range(.Cells($iExcelStartRow, $iExcelStartCol), .Cells($iExcelEndRow, $iExcelEndCol)).Select
			.Range(.Cells($iExcelStartRow, $iExcelStartCol), .Cells($iExcelEndRow, $iExcelEndCol)).value = $oExcel.Application.WorksheetFunction.Transpose($aArray)
		EndWith
	EndIf

EndFunc   ;==>_ExcelSheetWriteFromArray

FileOperations.au3
http://autoit-script.ru/index.php?topic=14598.0
 
Верх