1

Тема: AHK: Изменения нескольких слов

Всем привет. Я новичок в АХК, столкнулся с одной проблемой, мне нужно что-бы ахк смотрел, что указанно в первой переменной (Допустим это будет Name) и что-бы он переделывал это слово и засовывал в другую переменную. (Допустим это будет Teg). Тобишь, например:

StringReplace, Teg, Name, Привет, Здравствуйте, A

Только таких слов должно быть несколько, пробовал и строчки подряд:

StringReplace, Teg, Name, Привет, Здравствуйте, A
StringReplace, Teg, Name, Пока, До свидания A

Все равно не получается. Помогите пожалуйста.

2

Re: AHK: Изменения нескольких слов

anmac, приведите пример, что в переменных содержится изначально, и что должно быть после выполнения кода.

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

3

Re: AHK: Изменения нескольких слов

teadrinker
Хорошо, допустим изначально будет 10 вариантов в переменной, выбираются они через DropDownList, но думаю не суть важно:
1 - Рядовой, 2 - Сержант , 3 - Старшина, 4 - Лейтенант, 5 - Старший Лейтенант, 6 - Капитан, 7 - Майор, 8 - Подполковник, 9 - Полковник, 10 - Генерал - Майор.
Все это надо переделать и засунуть в другую переменную:
1 - Рядового, 2 - Сержанта, 3 - Старшины, 4 - Лейтенанта, 5 - Старшего Лейтенанта, 6 - Капитана, 6 - Майора, 8 - Подполковника, 9 - Полковника, 10 - Генерал - Майора.

4

Re: AHK: Изменения нескольких слов

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

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

5

Re: AHK: Изменения нескольких слов

teadrinker
Я думаю вот так будет легче объяснить:

Gui Add, DropDownList, vRank x260 y91 w134, Рядовой|Сержант|Старшина|Лейтенант|Старший лейтенант|Капитан|Майор|Подполковник|Полковник|Генерал-майор

Это строчка, из который будут браться первая переменная.

6

Re: AHK: Изменения нескольких слов

Не, не легче. Просто запишите, что в переменной перед изменением. Например так:

myVar := "Этот текст сейчас в переменной, который нужно изменить"
MsgBox % myVar
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Изменения нескольких слов

Вангую, здесь что-то такое автоматизируется, что в разных случаях слово должно прописываться в разных падежах. Первоначально создаётся некий массив или объект, в котором имеются несколько слов, каждое из которых в 6 вариантах (6 падежей). В какой-то момент скрипт берёт из массива "звание N" "падеж X".

8

Re: AHK: Изменения нескольких слов

teadrinker
Окей.

myVar := "Рядовой, Сержант, Старшина, Лейтенант, Старший Лейтенант, Капитан, Майор, Подполковник, Полковник, Генерал-майор"
MsgBox % myVar

9

Re: AHK: Изменения нескольких слов

ypppu
Отлично, буду очень рад если поможете.

10

Re: AHK: Изменения нескольких слов

Как-то так можно:

List := {"Рядовой": "Рядового", "Сержант": "Сержанта", "Старшина": "Старшины", "Лейтенант": "Лейтенанта", "Старший": "Старшего", "Генерал-майор": "Генерал-майора"}
myVar := "Рядовой, Сержант, Старшина, Лейтенант, Старший Лейтенант, Генерал-майор"

for k, v in List
   myVar := StrReplace(myVar, k, v)
MsgBox, % myVar
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Изменения нескольких слов

teadrinker
Отлично, только появился вопрос, как это теперь вставить в код ниже?

SendInput, /do На плечах погоны %Var%. {Enter}

12

Re: AHK: Изменения нескольких слов

В этот код никак вставить нельзя.

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

13

Re: AHK: Изменения нескольких слов

Если нужно отправить какую-то переменную, нужно и отправлять эту переменную.

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

14

Re: AHK: Изменения нескольких слов

teadrinker
А в какой нибудь подобный код можно вставить? И как можно сделать выбор, например, выбираю слово рядовой и мне оно автоматически склоняет только это слово.

15

Re: AHK: Изменения нескольких слов

Что значит вставить? Код не втулка, его сначала понять нужно.

anmac пишет:

И как можно сделать выбор

Совсем просто:

myVar := "Рядовой, Сержант, Старшина, Лейтенант, Старший Лейтенант, Генерал-майор"
newVar := StrReplace(myVar, "Рядовой", "Рядового")
MsgBox, % newVar
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Изменения нескольких слов

teadrinker
Та я немного нубик в данном деле, поэтому могу не правильно выясняться. Попробую ещё раз объяснить)
У меня есть  DropDownList, мне надо из него брать определенное слово и что-бы уже оно переделывалось. А не все слова сразу.
После чего хотелось бы, что-бы это измененное слово уже шло в:

 SendInput, /do На плечах погоны %Var%. {Enter}

Или в что-то подобное.

17

Re: AHK: Изменения нескольких слов

Так записывайте в DropDownList сразу в изменённом виде.

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

18 (изменено: Clannad5, 2022-10-11 01:46:59)

Re: AHK: Изменения нескольких слов

anmac
Можете полностью описать какую цель вы преследуете?
К примеру вы выбираете из листа слово Лейтенант.
Слово изменяет окончание и отправляется в Send.

Это всё?
В таком случае к чему эти изменения, чисто для визуальности?

19 (изменено: anmac, 2022-10-11 18:10:12)

Re: AHK: Изменения нескольких слов

Clannad5
Да, ради визуальности.
Пишу АХК ради игры и что-бы отыгровка выглядела нормально и не было картины как сейчас - https://i.yapx.cc/UPdgE.png
С двумя DropDownList в качестве выбора звания в Родительном и Именительном падеже.

Это происходит из-за того, что есть две отыгровки:

say Здравия желаю, Майор полиции.
и
do На плечах погоны майора.

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

20

Re: AHK: Изменения нескольких слов

anmac, не теряйте точки в конце предложений.

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

21 (изменено: Clannad5, 2022-10-11 19:53:19)

Re: AHK: Изменения нескольких слов

anmac пишет:

Да, ради визуальности.

Тогда читайте пост 15, он как раз делает то, что вам нужно.
Может быть вам что-то объяснить нужно?

Вот вам пример с Массивом:


Array := ["Рядовой", "Сержант", "Старшина", "Лейтенант", "Старший Лейтенант", "Генерал-майор"] ; Массив слов.
Var := RegExReplace(Array[2], Array[2], "Сержанта") ; Array[N] Там где N - номер Index'a массива.
Msgbox % Var ; Выводим изменённое слово.

Таким образом Array всегда будет неизменным и его можно использовать для Gui элементов, просто вставляя массив в качестве переменной.

P.S еще хотелось немного покритиковать ваш дизайн, он слишком 'Кислый', сделайте интерфейс попроще, не кладите яркий красный текст на синеватый фон, глаза выжигают. Так же насчёт шрифта, достаточно будет стандартного, т.к подобный текст не очень вяжется без приметного дизайна интерфейса.

22

Re: AHK: Изменения нескольких слов

Clannad5
Я на самом деле довольно далек от АХК. Давайте я прикреплю откуда должна браться переменная и куда должна вставляться.
Отсюда браться - 

Gui Add, DropDownList, vRank x260 y91 w134, Рядовой|Сержант|Старшина|Лейтенант|Старший лейтенант|Капитан|Майор|Подполковник|Полковник|Генерал-майор

Сюда вставляться -

SendInput, /do На плечах погоны %%.

Вашу критику по поводу дизайна - учту!

23 (изменено: Clannad5, 2022-10-11 22:34:46)

Re: AHK: Изменения нескольких слов

anmac


Gui Add, DropDownList, vRank x260 y91 w134, Рядовой|Сержант|Старшина|Лейтенант|Старший лейтенант|Капитан|Майор|Подполковник|Полковник|Генерал-майор
Gui Add, Button, gLabel, Ok
Gui, Show
return

Label:
Gui, Submit
Msgbox, %Rank%.

За место Msgbox подставьте свой SendInput.
Если хотите изменённый вывод, то после Gui, Submit измените информацию в переменной Rank с помощью RegExReplace.