Что нового

Сравнение символов

j.hlebnikov

Новичок
Сообщения
8
Репутация
0
Добрый день!

Задача.
Есть некий текст (ворд)
Пример:
Код:
NOCON p_in_debl,G,%M00151;	R+;	NCCON p_in_dist,G,%M00155;	C-;
V_WIRE;	AND_WORD p_io_cond,G,%R02209 16#81FF p_io_cond,G,%R02209;	END_RUNG;
в тексте есть группы символов одинаковой длины типа ,%M00151 или ,%R02209 (цифры могут быть разные).
Нужно эти символы из текста удалить,
С autoit знаком слабо, переключаюсь в окно и пользуюсь инструкциями send, if, for.
Хочу передвигая курсор вправо выделять по 2 символа и сравнивать их с ,% но не знаю как сделать сравнение.
Подскажите.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
j.hlebnikov,
Код:
$sTxt = 'NOCON p_in_debl,G,%M00151;   R+;   NCCON p_in_dist,G,%M00155;   C-;' & @CRLF & _
		'V_WIRE;   AND_WORD p_io_cond,G,%R02209 16#81FF p_io_cond,G,%R02209;   END_RUNG; '

ConsoleWrite(StringRegExpReplace($sTxt, '(?s)(,%[A-Z]\d{5})', '') & @LF)
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
j.hlebnikov
Чтобы выполнить вашим способом можно с помощью StringInStr получить позицию %, далее с помощью StringMid получить паттерн для замены, то есть сам "%M00151" и далее с помощью StringReplace сделать замену, указав смещение и количество замен 1. И поместите в цикл, чтобы повторить. А по @extended проверяёте выполнена ли замена, если да, то повторить цикл, если нет, то выйти из цикла.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
j.hlebnikov,
С Word можно примерно так сделать.
Код:
#include <Array.au3>
#include <Word.au3>

Local $oWordApp, $oDoc, $sTxt, $aFind, $iRes, $iFind

$oWordApp = _WordCreate()
If @error Then Exit 1
$oDoc = _WordDocOpen($oWordApp, @ScriptDir & '\Test.doc')
If @error Then Exit 2
Do
	$oDoc.Application.Selection.HomeKey
	$iRes = 0
	$aFind = 0
	If MsgBox(36, 'Question', 'Выделяем текст?' & @LF & 'Если да, выделите текст.') <> 6 Then ExitLoop

	$sTxt = $oDoc.Application.Selection.Range.Text
	If Not $sTxt Then
		MsgBox(16, 'Error', 'Нет выделенного текста')
		ContinueLoop
	EndIf
	$aFind = StringRegExp($sTxt, ',%[A-Z]\d{5}', 3)
	$iFind = UBound($aFind)
	If Not $iFind Then
		MsgBox(16, 'Error', 'Не найдены совпадения')
		ContinueLoop
	EndIf
	For $i = 0 To $iFind - 1
		$iRes += _WordDocFindReplace($oDoc, $aFind[$i], '', 1, -1)
	Next
	If $iFind = $iRes Then
		MsgBox(64, 'Info', 'Заменили ' & $iRes & ' совпадений')
	Else
		MsgBox(16, 'Error', 'Не заменили ' & $iFind - $iRes & ' совпадений')
	EndIf
Until 0
Код для 3.3.8.1
 
Верх