1 (изменено: Maxim, 2014-08-02 07:01:05)

Тема: AHK: Макрос для замены слова/фразы на другое слово/фразу

Я хочу создать макрос в Autohotkey, который бы осуществлял сотни замен в программе SDL Trados Studio 2014 г. Например, следующие замены: «? C» на «?C», «пробел/пробел» на «/», «пробел и точка» на «точка». То есть я хочу создать «макрос-улучшитель», который будет устранять типичные ошибки машинного перевода.

Подобный макрос был бы полезен и при работе с текстом только на русском (вне зависимости от того в какой программе набран текст), например, о макрос мог бы удалять двойные пробелы в конце работы над текстом, удалять случайно сделанные пробелы перед ,!?;:.

Я нашел замечательное видео на ютьюбе (на английском языке) (http://www.youtube.com/watch?v=10KM27uzoIE) в котором совершенно доступно и четко рассказывается, что нужно записать свои действия с помощью программки AutoScriptWriter, далее в Autohotkey необходимо назначить сочетание клавиш для запуска макроса, далее нужно скопировать текст из AutoScriptWriter в Autohotkey и в конце написать return.

Но по каким-то причинам у меня не получается создать такой макрос. Когда я внимательно рассматриваю тескт, записанный AutoScriptWriter, то я не вижу строки заменить слово ХХХХХХХХХХ на слово YYYYYYYYYYYYYYY.

Я хотел бы попросить знатоков помочь мне и написать только одну строчку, которая выполняла бы следующее действие:

меняла бы слово ХХХХХХХХХХ на слово YYYYYYYYYYYYYYY.

Дальше по аналогии я бы просто копировал эту строчку и менял бы неправильное слово на правильное.

2

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Maxim, приведите заголовок в порядок.

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

3

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Пожалуйста, пришлите пример "порядочного" заголовка.

4

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Тег [ h ] ... [ / h ] не нужен, он в заголовке не работает.

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

5

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Если я уберу теги, то  вы все равно напишите, что заголовок неправильный, поэтому я прошу пример правильного заголовка.

6

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Maxim, Ваша задача — выполнять требования модератора, а не предугадывать его действия. Если сомневаетесь в правильности текста заголовка, ознакомьтесь с этой и с этой темами, посмотрите, как составлены другие заголовки.

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

7

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Text = ХХХХХХХХХХ 
StringReplace, Text, Text, Х, Y, 1
MsgBox % Text
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

serzh82saratov, у тебя не совсем правильно.

text = ХХХХХХХХХХ
StringReplace, Text, Text, ХХХХХХХХХХ, YYYYYYYYYYYYYYY, 1
MsgBox % Text

9 (изменено: Li, 2014-08-02 17:08:10)

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Maxim,

Можно сделать так

file_path:="C:\test.txt"
; Считаем файл в память
FileArray_Count = 0
Loop, Read, %file_path%
{
  FileArray_Count+=1
  FileArray%FileArray_Count% :=  A_LoopReadLine
}
; Зададим сочетания
value1:="? C"
value1_paste:="?C"
value2:=" / "
value2_paste:="/"
value3:=" ."
value3_paste:="."
; Произведем замену  в каждой строчке
Loop, %FileArray_Count%
{
  StringReplace, FileArray%A_Index%, FileArray%A_Index%, %value1%, %value1_paste%, 1
  StringReplace, FileArray%A_Index%, FileArray%A_Index%, %value2%, %value2_paste%, 1
  StringReplace, FileArray%A_Index%, FileArray%A_Index%, %value3%, %value3_paste%, 1
}
test_ahk:="" ; в эту переменную наберем все то, что мы хотим записать в файл (64 Мб макс размер ее, но можно увеличить с помощью #MaxMem Megabytes (от 1 до 4095 Мб))
Loop %FileArray_Count% ; Соберем все в одну переменную test_ahk
{
  temp_string:= FileArray%A_Index%
  test_ahk .= temp_string "`n" 
}
IfExist, %A_ScriptDir%\temp.txt 
  FileDelete, %A_ScriptDir%\temp.txt
; Записываем все изменения 
fileappend, %test_ahk%, %A_ScriptDir%\temp.txt ; Запись идет в файл именно одной переменной, так как каждую строчку массива сохранять в файл занимает гораздо дольше по времени
filemove, %A_ScriptDir%\temp.txt, %file_path%, 1

10

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Зачем такие сложности, когда есть команда FileRead.

11 (изменено: Maxim, 2014-08-04 11:59:15)

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Здравствуйте, Malcev!

Я на основе вашего совета попытался создать следующий макрос:

#м::
Text = в пробирке
StringReplace, Text, Text, в пробирке, in vitro, 1
MsgBox % Text
Return

Но он не сработал. Насколько я понял, вы согласны с Li, и знаете как улучшить его ответ. Пожалуйста, напишите как улучшить ответ Li, что избежать громоздскости.  Или возможно ваш ответ лучше чем ответ Li, просто я не неправильно его воплотил?

12 (изменено: ypppu, 2014-08-04 12:46:46)

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Maxim, заключите код скрипта в тег "code"!

Добавлено: Запрещается отвечать в теме до исправлений.

Добавлено: Возвращаю сообщение Li

Li пишет:

Maxim,
С учетом замечаний Malcev код будет выглядеть так:

file_path:="C:\test.txt"
; Считаем файл в память
FileRead, template_in_memory, %file_path% ; Размер файла не должен превышать 1 Гб
; Зададим сочетания
value1:="? C"
value1_paste:="?C"
value2:=" / "
value2_paste:="/"
value3:=" ."
value3_paste:="."
; Произведем замену сочетаний
StringReplace, template_in_memory, template_in_memory, %value1%, %value1_paste%, 1
StringReplace, template_in_memory, template_in_memory, %value2%, %value2_paste%, 1
StringReplace, template_in_memory, template_in_memory, %value3%, %value3_paste%, 1
IfExist, %A_ScriptDir%\temp.txt ; удаляем в прошлый раз созданный временный файл
  FileDelete, %A_ScriptDir%\temp.txt
; Записываем все изменения 
fileappend, %template_in_memory%, %A_ScriptDir%\temp.txt 
filemove, %A_ScriptDir%\temp.txt, %file_path%, 1

Я столкнулся с тем, что функция StringReplace считывает 3 и 4 параметры до знака пробела, потому приходится использовать промежуточные переменные value и value_paste

13 (изменено: Maxim, 2014-08-04 12:00:46)

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

ОК. Разобрался с тегами

14 (изменено: Maxim, 2014-08-04 11:58:56)

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Уважаемый, Malcev!

Я при первой возможности проверю, работает ли следующий макрос:

#м::
Text = в пробирке
StringReplace, Text, Text, в пробирке, in vitro, 1
MsgBox % Text
Return

на других компьютерах (иногда бывает так, что определенный скрипт не работает на каком-то компьютере) и также попрошу коллегу провести тестирование этого скрипта.

Когда я запускаю вышеуказанный скрип, то появляется очень маленькое окошко, в котором написано in vitro. Может быть, вы сможете по такому поведению скрипта определись, что я делаю не так.

15

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Помощь по тегам

Ни к чему выделять жирным. Используйте специальный предназначенный тег «code».

16

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Все вы делаете так.
Командой

StringReplace, Text, Text, в пробирке, in vitro, 1

Вы заменяете в переменной Text слова "в пробирке" на слова "in vitro"

17

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Уважаемый Li, я конечно буду рассматривать ваш вариант, если у меня не получится с решить задачу (осуществление одной замены) при использовании 3-4 строк.

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

18

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Здравствуйте, Malcev!

Я все таки сумел написать РАБОТАЮЩИЙ макрос с помощью AutoScriptWriter.

#м::
Send, {CTRLDOWN}h{CTRLUP}
WinWait, Find and Replace, M&atch whole word
IfWinNotActive, Find and Replace, M&atch whole word, WinActivate, Find and Replace, M&atch whole word
WinWaitActive, Find and Replace, M&atch whole word
Send, в{SPACE}пробирке{TAB}{SHIFTDOWN}{CTRLDOWN}{SHIFTUP}{CTRLUP}in{SPACE}vitro
MouseClick, left,  52,  352
Sleep, 100
MouseClick, left,  207,  352
Sleep, 100
Send, {ALTDOWN}{F4}{ALTUP}
MouseClick, left,  202,  118
Sleep, 100
WinWait, Find and Replace, M&atch whole word
IfWinNotActive, Find and Replace, M&atch whole word, WinActivate, Find and Replace, M&atch whole word
WinWaitActive, Find and Replace, M&atch whole word
Send, {ALTDOWN}{F4}{ALTUP}
Return

Но все равно осталось чувство, что ваш скрипт намного лучше. Вы не могли бы прислать именно тот скрипт, который у Вас позволяет заменять "в пробирке" на "in vitro". Может быть я допускаю какую то обидно незначительную ошибку и у меня он поэтому не запускается. Для меня это не просто макрос - это возможность взлететь в плане производительности.

19

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Если вы хотите чтобы замещало при открытом окне документа то можно так:

f11::
SetBatchLines, -1
ClipBoard =
SendInput, ^{vk41}^{vk43}    ;  ctrl+A crl+C
ClipWait, 2
if ErrorLevel
{
   MsgBox, Буфер обмена пуст!
   Return
}
StringReplace, ClipBoard, ClipBoard, в пробирке, in vitro, All
SendInput, ^{vk56}     ;  ctrl+V
Return

20

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Я восхищен. Все работает. Пойду выпью апельсинового сока за ваше здоровье. Дополнительный заработок, полученный с помощью Вашего скрипта за полгода, легко позволит мне съездить на Сейшелы.
Удачи! Большое спасибо!

21

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Уважаемый, Malcev.

Вы не могли бы сообщить какой-либо свой электронный адрес, направив его по адресу maximpolukhin@mail.ru. У меня к вам есть деловое предложение.

22

Re: AHK: Макрос для замены слова/фразы на другое слово/фразу

Если вы по поводу написания скриптов, то это не ко мне. Я сам новичок-любитель.
Обратитесь лучше к teadrinker или к serzh82saratov.