Что нового

[Автоматизация] Вытащить из буфера часть данных и скинуть их в файл

BooZ

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

Описание:
В буфере обмена скопированы данные со странички отчёта о событии. Сама страничка сделана на js скриптах, поэтому данные оттуда забираются тупо Cntl+A , Cntrl+C .
Нужно найти в буфере и записать в файл с результатом часть данных. А именно:
В буфере содержится такое содержимое ( скопировал его в файл и вложил сюда)

Необходимо найти следующие данные (выделил их жирным) , которые содержаться в этом тексте и сохранить их в файле tempvar.txt

[box title=TitleBox]Ticket: 1386621 - Неисправность по питанию

ui-button


Title: Неисправность по питанию Region: Мартаноский регион Event date: 24.06.2015 13:50:33
Status: Назначен Ne name: BTS_1604_32get alarms Create date: 24.06.2015 13:58:33
External ID: DN: BSC:6/BS:32 Fix date:
Time to travel (h.): Site: Гадюкиноget alarms Deadline: 25.06.2015 13:50:33
Executor group: FOPS-Гадюкино Impact description new: Cause class: /Электропитание/Аварии в сети первичного электропитания
Executor: Service new: Cause text: Отсутствие электропитания
Incident priority: 3 Service type new: Solution class:
SLA:
[/box]

Результат в файле tempvar.txt должен быть в таком виде:

ID:1386621
Title:Неисправность по питанию
Status:Назначен
Ne name:BTS_1604_32
Site:Гадюкино
Deadline:25.06.2015 13:50:33
Cause text:Отсутствие электропитания

Примечания:
Переменные Title , Cause text могут отсутствовать , то есть пустое поле ( как Executor или Service new) и тогда в файле tempvar.txt напротив этих переменных тоже должно быть пусто.

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

Вложения

  • IMS.txt
    3.9 КБ · Просмотры: 4

edyapd

Осваивающий
Сообщения
380
Репутация
30
Как-то так получилось
Код:
$sData = ClipGet()
$err = @error
Switch $err
Case 1
	ConsoleWrite('Буфер обмена пуст' & @LF)
Case 2
	ConsoleWrite('Буфер обмена содержит не текстовое значение' & @LF)
Case 3, 4
	ConsoleWrite('Невозможно получить доступ к буферу обмена' & @LF)
Case Else
	$ID = StringRegExp($sData, '(?si)Ticket:\s*?(\d+?)\s', 3)
	If IsArray($ID) Then
		$ID = $ID[0]
	Else
		$ID = 'Не найден'
	EndIf
	
	$Title = StringRegExp($sData, '(?si)Title:\s*(.*?)\s*?Region', 3)
	If IsArray($Title) Then
		$Title = $Title[0]
	Else
		$Title = ' '
	EndIf
	
	$Status = StringRegExp($sData, '(?si)Status:\s*(.*?)\s*?Ne name', 3)
	If IsArray($Status) Then
		$Status = $Status[0]
	Else
		$Status = 'Не найден'
	EndIf
	
	$Ne_name = StringRegExp($sData, '(?si)Ne name:\s*(.*?)\s*?get', 3)
	If IsArray($Ne_name) Then
		$Ne_name = $Ne_name[0]
	Else
		$Ne_name = 'Не найден'
	EndIf
	
	$Site = StringRegExp($sData, '(?si)Site:\s*(.*?)\s*?get', 3)
	If IsArray($Site) Then
		$Site = $Site[0]
	Else
		$Site = 'Не найден'
	EndIf
	
	$Deadline = StringRegExp($sData, '(?si)Deadline:\s*([\d.: ]+)', 3)
	If IsArray($Deadline) Then
		$Deadline = $Deadline[0]
	Else
		$Deadline = 'Не найден'
	EndIf
	
	$Cause_text = StringRegExp($sData, '(?si)Cause text:\s*(.*?)\s*?Incident', 3)
	If IsArray($Cause_text) Then
		$Cause_text = $Cause_text[0]
	Else
		$Cause_text = ' '
	EndIf
	$sData = 'ID:' & $ID & @CRLF & _
				'Title:' & $Title & @CRLF & _
				'Status:' & $Status & @CRLF & _
				'Ne name:' & $Ne_name & @CRLF & _
				'Site:' & $Site & @CRLF & _
				'Deadline:' & $Deadline & @CRLF & _
				'Cause text:' & $Cause_text & @CRLF & @CRLF
	FileWrite('tempvar.txt', $sData)
	ConsoleWrite('ID:' & $ID & @LF & _
				'Title:' & $Title & @LF & _
				'Status:' & $Status & @LF & _
				'Ne name:' & $Ne_name & @LF & _
				'Site:' & $Site & @LF & _
				'Deadline:' & $Deadline & @LF & _
				'Cause text:' & $Cause_text & @LF)
EndSwitch
 
Автор
B

BooZ

Новичок
Сообщения
2
Репутация
0
Отлично, всё работает !
Есть вопрос: как я понял , файл tempvar.txt дописывается, и постоянно будет увеличиваться.
Как сделать так, чтоб при запуске макроса файл обнулялся?

Ничего подходящего не придумал, как в начале поставить проверку
Код:
If FileExists("tempvar.txt") Then
    FileDelete("tempvar.txt") 
Else
    MsgBox(4096, "tempvar.txt File", "Не существует")
EndIf
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
BooZ [?]
Как сделать так, чтоб при запуске макроса файл обнулялся?

Код:
Local $hFile = FileOpen('tempvar.txt', 2)
;If $hFile = -1 Then Exit MsgBox(16, "error", "error FileOpen")
FileWrite($hFile, $sData)
FileClose($hFile)
 
Верх