1

Тема: AHK: Динамические переменные в статической строке

Привет. Я делаю ботов для telegram, все в принципе складно (кроме однопоточности), но вот тут возник вопрос с разными языками интерфейса. При запуске бота юзер выбирает язык, он записывается в конфиг и все. В самом боте в самом начале в переменных прописываются все строки на разных языках, например:

ruHello := "Привет"
enHello := "Hello"

Далее при обращении человека происходит считывание из конфига его языка в переменную lang и отправка ему строки вида %lang%Hello. Тут вопросов нет, все работает. Но проблема появилась, когда нужно было вставить сюда другие переменные, которые считывались непосредственно при обращении юзера. Мне нужно, чтобы я заранее в строке прописал ключевые символы (например, {}), а при формировании строки туда подставлялись нужные переменные.

Например, я пишу в начале:

ruData := "Ваше имя: {}, ваш возраст: {}"

А потом в событии обработки сообщения я бы считал нужные данные именно по этому юзеру (данные ведь разные всегда) и смог подставить их в эту строку соответственно. Если я в начале в строке пишу названия переменных, которые используются в процедуре обработки, это не срабатывает, т.к., по сути, строка определяется в начале с пустыми переменными. Принципиально, чтобы все строки были в начале кода для удобного редактирования.

P.S. я вроде видел такой синтаксис, но, к сожалению, не смог нигде найти его. Что-то вроде такого:

string := "Hello, your name is {}", name       ; вместо {} подставляется переменная name

Помогите, пожалуйста, решить проблему.

2

Re: AHK: Динамические переменные в статической строке

Может так?

name := "Vasya"
string := "Hello, your name is " . name  
MsgBox, %string%
Return

3

Re: AHK: Динамические переменные в статической строке

ypppu

Проблема в том, что переменная (name) определяется в теле скрипта, а строка должна задаваться заранее (в начале). В теле скрипта обрабатывается сообщение юзера, потом достаётся строка нужного языка, из конфига вытаскивается имя (Vasya), вставляется в строку и отправляется юзеру.

4

Re: AHK: Динамические переменные в статической строке

То есть заранее неизвестно не только имя, но и строка, в которую оно будет подставляться? Тогда так.

string555 := "Hello, your name is "
name := "Vasya"
string := string555 . name  
MsgBox, %string%
Return

5 (изменено: Lencore228, 2020-07-05 18:37:50)

Re: AHK: Динамические переменные в статической строке

ypppu

Я описал немного другую ситуацию: "Ваше имя: {}, ваш возраст: {}".
Отличие в том, что переменная не в конце и не одна. То есть динамический контент непосредственно внутрь статического вставляется.

6

Re: AHK: Динамические переменные в статической строке

Понятно. Тогда смотрите пример из второго сообщения. То, что взято в кавычки - "статический контент". То, что без кавычек - воспринимается как переменная (в этом месте будет её содержимое). Используя такой разделитель (пробел точка пробел), можно чередовать разные "контенты".

7 (изменено: Lencore228, 2020-07-05 20:48:05)

Re: AHK: Динамические переменные в статической строке

Решил проблему.

text := "Привет, меня зовут {}, мне {} лет"
vars := ["Ваня", "17"]
result := format(text, vars *)
msgbox % result ; Выводит "Привет, меня зовут Ваня, мне 17 лет"

Тема закрыта.