Что нового

[Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер)

Dk

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

Описание:
Нужен скрипт, который бы удалял определённыe символы из текста при копировании.
Например копирую следующей текст.
"1-2-3-3-3-3-3-45-5-5-5-4"
Мне нужно что-бы знак "-" был автоматически удалён при вставке и в конце было только "1233333455554"

Примечания:
Важно что бы при старте программа спрашивала меня какие/ой символ/ы я хочу удалять и была возможность указания сразу нескольких символов.

Спасибо :smile:
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Dk
OffTopic:
Лучше прочти о ClipGet(), ClipPut(), StringReplace(), StringSplit(), For ... to .. Next, While ... WEnd, InputBox()
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Пока я сам что-то сделаю сто лет пройдёт. Всё что вы перечислили мне известно, но соединить всё во едино.... я не могу.
Мне легче учитbся на готовых скриптах, знаний у меня почти никаких, а программа очень нужна, она бы облегчила мне жизнь. Поэтому в "Стол заказов" и написал.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

В одной моей программе есть функция "нормализация текста". Она делает поиск-замену по тексту в формате rtf пакетами регулярных выражений.

AutoIt посылается хоткей Ctrl+Ins стороннему редактору, редактор копирует в буфер обмена выделенный текст. Затем программа достает из буфера rtf, парсит его, полученный текст обрабатывает набором регулярных выражений, которые прописаны в ini-файле. Результат обработки кидается в rtf-буфер, потом посылает хоткей Shift+Ins обратно в редактор - и измененный текст вставляется из буфера.

Это функция позволяет красиво форматировать документы в "один клик": удаляет лишние символы, расставляет неразрывные пробелы и т.д. На картинках "до и после":

http://hkar.ru/pBRk

http://hkar.ru/pBRi

Это нужно для обработки документов, взятых с интернет-сайтов или полученных путем распознавания с помощью FineReader.

Короче, AutoIt способен на многое :smile:
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Это конечно хорошо, что у вас есть такая программа.
Но я же не вижу даже скрипта.

И я не работаю с файлами, с разных интернет страниц копирую номера, вставляю в поисковик и кучу всего, но именно с текстовыми файлами не работаю (хотя я понимаю, что суть одна, но для меня не подходит, так как в скрипте (если вы его выложите ;) ) будет много не нужного мне и мне будет трудно вникнуть.
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Да у меня тоже программа не с файлами работает. Пользователь может сидеть в Word'е или другом редакторе, выделить текст и нажать на кнопку - а остальную работу (по копированию, заменам в буфере и обратной вставке) делает AutoIt.

Для вашей задачи все проще. Вам нужно отлавливать хоткей вставки (например, Shift + Insert или свой назначенный хоткей). Если в данный момент вы находитесь в поисковике (куда нужно вставлять текста) и буфер не пустой, то производить замену в буфере обмена, а потом делать вставку в этот поисковик. Это все делается стандартными функциями AutoIt без особого шаманства. Один раз разберетесь, потом такие задачки сможете щелкать на раз-два.

Как отлавливать нажатый хоткей? - Hotkeyset()
Как узнать, что находитесь в поисковике? - If (Winactive())
Как узнать, что в буфере обмена? - Clipget(), _ClipBoard_GetData()
Как сделать замену текста в строке? - StringReplace() или StringRegExpReplace()
Как вставить в буфер измененную строку? - Clipput() или _ClipBoard_SetData()
Как вставить текст из буфера в поисковик? - Send(), ControlSend(), ControlSetText()
 

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Dk

Код:
HotKeySet('{ESC}', '_ProExit')

;##############################################################################
;Символы для поиска вводить через пробел
Global $sSimb = InputBox('Символ для удаления', 'Укажите символ/ы для удаления')
;##############################################################################
;Символы для поиска вводить через пробел

Global $aSimb = StringSplit($sSimb, ' '), $sClip

While 1
	Sleep(200)
	$sClip = ClipGet()
	For $i = 0 To UBound($aSimb) - 1
		If StringRegExp($sClip, $aSimb[$i]) Then
			_Job()
			ExitLoop
		EndIf
	Next
WEnd

Func _Job()
	For $i = 1 To UBound($aSimb) - 1
		$sClip = StringRegExpReplace($sClip, '[' & $aSimb[$i] & ']', '')
	Next
    MsgBox(64, 'Info', $sClip)
	;##########################################################
	;Вместо этого блока можно вставить вашу функцию вставки
	ClipPut('')
	$sClip = ''
	;Вместо этого блока можно вставить вашу функцию вставки
	;##########################################################
EndFunc   ;==>_Job

Func _ProExit()
	Exit
EndFunc   ;==>_ProExit
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Это не совсем то что мне нужно.
Мне надо что бы, удаление шло в буфере обмена а не выскакивала Инфа. Надо что-бы скопировал и потом вставил.
А здесь я копирую появляется инфа. и потом вставить не могу, надо копироват с окно, которое выскачело. Это очень неудобно.
 

veselroger

Новичок
Сообщения
16
Репутация
3
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Dk, просто запихни данные из переменной $sClip обратно в буфер. Т.е. вместо очистки ClipPut('') сделай ClipPut($sClip) и убери MsgBox. И все замечания к примеру ivsatel исчезнут )
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер

Dk, пробуйте.
Замена при нажатии ScrollLock. В любое время через Ctrl+Shift+F1 можно вызвать диалог и изменить символы для замены. Клавиши, естественно, можете назначить свои.
Код:
HotKeySet("{ScrollLock}", "DoIt")
HotKeySet("^+{F1}", "Settings")

Global $Ar[1] = ["-"]

Settings()

Do
Until Not Sleep(1000)

Func DoIt()
  Local $Clip = ClipGet()
  If @error Then Return
  For $i = 0 To UBound($Ar) - 1
    $Clip = StringReplace($Clip, $Ar[$i], "")
  Next
  ClipPut($Clip)
EndFunc

Func Settings()
  Local $Str = "", $Text = ""
  For $i = 0 To UBound($Ar) - 1
    $Text &= $Ar[$i]
  Next
  $Str = InputBox("Замена символов", "Введите символы для замены", $Text)
  If $Str Then $Ar = StringSplit($Str, "", 2)
EndFunc
 
Автор
D

Dk

Новичок
Сообщения
358
Репутация
2
Re: [Автоматизация] Работа с буфером обмена (удаление определённых символов при копировании в буфер


InnI, Большое Вам спасибо :-[
 
Верх