1

Тема: AHK: Буфер обмена, замена текста

Здравствуйте! Я новичок. У меня задача следующая:
В буфер обмена копируется текст, к примеру:

+ открыть спойлер

Заголовок с информацией
Печать
23.11.2015

Заголовок с информацией
Заголовок с информацией
Заголовок с информацией

Здесь об этом написано очень много. Достаточно было почитать, но к сожалению не все найдено или что-то не до понято. Далее рыба:
Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание систем массового участия. Равным образом сложившаяся структура организации влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям. Не следует, однако забывать, что консультация с широким активом влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации новых предложений. Таким образом новая модель организационной деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Дмитрий.

после нажимаю F1 (он обрабатывается AHK), далее обычным образом вставляю текст, и у меня на выходе получается:

+ открыть спойлер

Заголовок с информацией
Здесь об этом написано очень много. Достаточно было почитать, но к сожалению не все найдено или что-то не до понято. Далее рыба:
Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание систем массового участия. Равным образом сложившаяся структура организации влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям. Не следует, однако забывать, что консультация с широким активом влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации новых предложений. Таким образом новая модель организационной деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.
С уважением, Дмитрий. Прочитано.

С последней строчкой справился самостоятельно:

F1::
StringReplace, clipboard, clipboard, Дмитрий, С уважением Дмитрий, All ; Замена
Clipboard = %Clipboard% .Прочитано. ; Дописывает в конце текста

но вот как (всегда) удалить 2 и 3 строку (они всегда разные), удалить повторяющиеся строки "Заголовок с информацией" В не зависимости сколько их, оставив только первую, и как убрать пустые строки?

2

Re: AHK: Буфер обмена, замена текста

F1::
   TxtIn:=Clipboard
   StringReplace, TxtIn, TxtIn, Дмитрий, С уважением Дмитрий, All
   TxtIn .= " Прочитано."
   Loop, Parse, TxtIn, `r`n
   {
      If (!A_LoopField)||(A_Index=2)||(A_Index=3)||((A_LoopField="Заголовок с информацией")&&(A_Index!=1))
         Continue
      TxtOut .= A_LoopField . "`n"
   }
   Clipboard := TxtOut
Return

3

Re: AHK: Буфер обмена, замена текста

F1::
text_new := ""
text := clipboard
text := RegExReplace(text, "`nЗаголовок с информацией\s+", "")
Loop, parse, text, `n
% ((A_Index=2) or (A_Index=3)) ? "" : (text_new := (text_new ? text_new "`n" : "") A_LoopField)
clipboard := text_new
return

4

Re: AHK: Буфер обмена, замена текста

"Заголовок с информацией" - это условно, может быть и другой заголовок. И получается что примеры выше привязаны именно к этому словосочетанию, а хотелось, чтобы было более универсально, без привязки.

5

Re: AHK: Буфер обмена, замена текста

Если заголовок один и тот же в тексте, тогда так.

F1::
   TxtIn:=Clipboard
   StringReplace, TxtIn, TxtIn, Дмитрий, С уважением Дмитрий, All
   TxtIn .= " Прочитано."
   Loop, Parse, TxtIn, `r`n
   {
      (A_Index=1)&&(Title:=A_LoopField)
      If (!A_LoopField)||(A_Index=2)||(A_Index=3)||((A_LoopField=Title)&&(A_Index!=1))
         Continue
      TxtOut .= A_LoopField . "`n"
   }
   Clipboard := TxtOut
Return

Иначе нужно искать критерии для выделения других заголовков.

6 (изменено: yalanne, 2015-04-18 02:27:08)

Re: AHK: Буфер обмена, замена текста

F1::
text_new := "",text := clipboard,text := RegExReplace(text, "`n" substr(text,1,RegExMatch(text,"`r")-1) "\s", "")
Loop, parse, text, `n
% ((A_Index=2) or (A_Index=3)) ? "" : (text_new := (text_new ? text_new "`n" : "") A_LoopField),clipboard := text_new "Прочитано"
return

В этом варианте будут убираться одинаковые строчки которые будут похожи на первую.

7 (изменено: Malcev, 2015-04-18 02:18:56)

Re: AHK: Буфер обмена, замена текста

Irbis, твой скрипт неверен.
Он меняет всех  "Дмитрий" на "С уважением Дмитрий".
Если в середине текста не может быть такой фразы: `nЗаголовок с информацией`n
То я бы сделал так:

f1::
RegexMatch(ClipBoard, "s).*[\n\r]+Заголовок с информацией[\n\r]+(.*)Дмитрий\.", match)
msgbox % Clipboard := "Заголовок с информацией`n`r" match1 "С уважением, Дмитрий. Прочитано."
return

8

Re: AHK: Буфер обмена, замена текста

у yalanne 2 вариант четко подходит под верхушку текста, осталось низ доделать. Пробовал сделать обычную приписку "Прочитано" - не выводит почему то

clipboard := text_new. Прочитано

9 (изменено: yalanne, 2015-04-18 02:28:05)

Re: AHK: Буфер обмена, замена текста

Добавил в код эту надпись.
надо указывать в кавычках.

10

Re: AHK: Буфер обмена, замена текста

yalanne, спасибо огромное!

11

Re: AHK: Буфер обмена, замена текста

Clipboard =
(
Заголовок с информацией
Печать
23.11.2015

Заголовок с информацией
Заголовок с информацией
Заголовок с информацией

Здесь об этом написано очень много. Достаточно было почитать, но к сожалению не все найдено или что-то не до понято. Далее рыба:
Разнообразный и богатый опыт постоянное информационно-пропагандистское обеспечение нашей деятельности в значительной степени обуславливает создание систем массового участия. Равным образом сложившаяся структура организации влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Идейные соображения высшего порядка, а также постоянный количественный рост и сфера нашей активности в значительной степени обуславливает создание системы обучения кадров, соответствует насущным потребностям. Не следует, однако забывать, что консультация с широким активом влечет за собой процесс внедрения и модернизации направлений прогрессивного развития. Равным образом постоянное информационно-пропагандистское обеспечение нашей деятельности способствует подготовки и реализации новых предложений. Таким образом новая модель организационной деятельности в значительной степени обуславливает создание существенных финансовых и административных условий.

Дмитрий.
)
Clipboard := RegExReplace(Clipboard, "\R", "`r`n")
Clipboard := RegExReplace(Clipboard, "(^.+\R\K(.+\R){2}|Заголовок с информацией\R|(?<=\r\n)\r\n)")
Clipboard := RegExReplace(Clipboard, "(Дмитрий\.)$", "С уважением, $1 Прочитано.")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Буфер обмена, замена текста

"Заголовок с информацией" - это условно, может быть и другой заголовок.

Не заметил. Тогда можно так:

f1::
RegexMatch(ClipBoard, "s)(?:.*?[\n\r]+){5}(.*)Дмитрий\.", match)
msgbox % Clipboard := match1 "С уважением, Дмитрий. Прочитано."
return

13 (изменено: busyava, 2015-04-28 00:48:52)

Re: AHK: Буфер обмена, замена текста

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

блаблабла
Это взято с сайта google ;приписка

блаблабла
Это взято с сайта яндекс ;приписка


_______
браузер мозилла

14 (изменено: Malcev, 2015-04-28 01:49:05)

Re: AHK: Буфер обмена, замена текста

Например так:

#Persistent
return

OnClipboardChange:
If !WinActive("ahk_class MozillaWindowClass") or toggle
{
   toggle := ""
   return
}
toggle := 1
WinGetTitle, Title, A
If InStr(title, "Яндекс")
   site := "Это взято с сайта Яндекс"
Else if InStr(title, "Google")
   site := "Это взято с сайта Google"
Else
   site := ""
If (site != "")
   ClipBoard .= "`r`n" site
return

15

Re: AHK: Буфер обмена, замена текста

с msgbox работает, а вот с FileAppend не хочет. Что не так?:

F4::
#Persistent
return

OnClipboardChange:
IfWinNotActive ahk_class MozillaWindowClass
   return
WinGetTitle, Title, A
If InStr(title, "Яндекс")
   site := "Это взято с сайта Яндекс"
Else if InStr(title, "Google")
   site := "Это взято с сайта Google"
Else
   site := ""
If (site != "")
FileAppend, %Clipboard% `n site`n`n----------------------`n, G:\My Text File.txt
return

16

Re: AHK: Буфер обмена, замена текста

Я подправил 14 код.

17

Re: AHK: Буфер обмена, замена текста

Malcev пишет:

Я подправил 14 код.

вот так работает:

#Persistent
return

OnClipboardChange:
IfWinNotActive ahk_class MozillaWindowClass
   return
WinGetTitle, Title, A
If InStr(title, "Яндекс")
   site := "Это взято с сайта Яндекс"
Else if InStr(title, "Google")
   site := "Это взято с сайта Google"
Else
   site := ""
If (site != "")
FileAppend, %Clipboard%`n%site%`n`n----------------------`n, G:\My Text File.txt
return

Спасибо, Malcev!

18

Re: AHK: Буфер обмена, замена текста

http://www.script-coding.com/AutoHotkey/IfInString.html
прочитал, но так и не понял, а как в этот код добавить еще множество сайтов, помимо гугля и яндекса?

19

Re: AHK: Буфер обмена, замена текста

Дублируете эти секции:

Else if InStr(title, "Google")
   site := "Это взято с сайта Google"

Вместо "Google" вписываете отличительный признак страницы, который получаете через AHKSPY.

20

Re: AHK: Буфер обмена, замена текста

это я сразу понял и применил. вопрос стоит иначе: как мне размножить этот код на 5-7-8-158 сайтов?
то есть к примеру этот код нужно применить к гугль, яндекс, википедия, ютуб, форум скрипт кодинг, то как будет выглядеть код?

21

Re: AHK: Буфер обмена, замена текста

Ну так и будет:

If InStr(title, "Яндекс")
   site := "Это взято с сайта Яндекс"
Else if InStr(title, "Google")
   site := "Это взято с сайта Google"
Else if InStr(title, "Wiki")
   site := "Это взято с сайта Wiki"
Else if InStr(title, "script-coding")
   site := "Это взято с сайта script-coding"
Else
   site := ""

22 (изменено: busyava, 2015-04-28 14:40:42)

Re: AHK: Буфер обмена, замена текста

Работает!
А можно в этот код в Else if InStr дописать код при котором (естественно в зависимости от title) будет удаляться 2ая строка в копируемом тексте?

Начинать надо с Loop, parse, clipboard, `n, `r ?

23

Re: AHK: Буфер обмена, замена текста

Наверное можно и регексами:

f11::
msgbox % RegexReplace(ClipBoard, "s)\R.*?(?=(\R|$))",,,1)

24

Re: AHK: Буфер обмена, замена текста

Проще собрать все названия в один массив. Если [в скобках] стоит 1, (в примере у Wiki и Google), то 2ая строка будет вырезана.

#Persistent
Sites := {"Яндекс": ["Это взято с сайта Яндекс"]
        ,"Google": ["Это взято с сайта Google", 1]
        ,"Википедия": ["Это взято с сайта Wiki",1]
        ,"Серый форум": "Это взято с сайта script-coding"}
return
OnClipboardChange:
   IfWinNotActive ahk_class MozillaWindowClass
   return
   site := ""
   WinGetTitle, Title, A
   for k,v in Sites 
      If InStr(Title, k) {
         site := v[1]
         if (v[2]=1)
            ClipBoard := RegexReplace(ClipBoard, "s)\R.*?(?=(\R|$))",,,1)
         Break
      }
If (site != "")
   FileAppend, %Clipboard%`n%site%`n`n----------------------`n, G:\My Text File.txt
   Sleep 300
return

25 (изменено: viviancels, 2022-12-21 14:28:12)

Re: AHK: Буфер обмена, замена текста

Здравствуйте. Почему-то, не редактируется буфер.

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases
; #Warn  ; Enable warnings to assist with detecting common errors.
; SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
; SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
#SingleInstance Force
^vk43::
Clipboard :=
Sleep 150
Send ^{vk43}
Sleep 150
Clipwait
Clipboard := RegExReplace(Clipboard, "m`a)^(.*)$\n.*,\s(.*)$", "$2 - $1")
return

Текст:

Awakening

En-Core, Malyarovsky Maxim, Nikita

Результат должен быть:

Nikita - Awakening

Здесь ошибки вроде нет:
https://regex101.com/r/MeOefY/1

UPD. Понял, в чем ошибка. Нужно добавить опцию s точка - перенос строки):

RegExReplace(Clipboard, "ms`a)^(.*)$\n.*,\s(.*)$", "$2 - $1")

26

Re: AHK: Буфер обмена, замена текста

viviancels, ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на оформление ссылок.
Также прочитайте внимательно этот пост.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder