1 (изменено: ypppu, 2017-04-29 13:44:27)

Тема: AHK: Переменная в тексте файла

В файл text.txt вписано то же самое что в строку var1:

111 %var% 222
var = 777
var1 =
(
111 %var% 222
)
FileRead,var3,text.txt
MsgBox, %var1% %var3% 

Но, при обращении к строке из кода переменной присваивается 777, а при обращении к строке из файла - нет. Почему так?
У меня много  больших текстов и переменных в них вставил много, не хочется всё тащить в код, да и не всегда это можно сделать.  Как правильно присвоить значения переменным в текстах взятых из файлов?

Наверняка кто-то уже спрашивал подобное, но я ничего не нашёл.

2

Re: AHK: Переменная в тексте файла

Изменил название темы "AHK: VAR в строке из кода и из файла" на более понятное.

3

Re: AHK: Переменная в тексте файла

Этот код создаёт содержимое переменной var1 из трёх кусочков:

var1 =
(
111 %var% 222
)

в то время как FileRead,var3,text.txt записывает в переменную буквальную строку, взятую из файла.

4

Re: AHK: Переменная в тексте файла

Мне непонятно про три кусочка. Я считал, что там строка и там строка. Ладно, не понимаю, так не понимаю.

Можно как-то читать из файла так, чтобы тоже получались "кусочки", или как-то впоследствии строку чем-то изменить так, чтобы получились нужные "кусочки" и переменные обрабатывались?

5

Re: AHK: Переменная в тексте файла

Kurskador, в первом случае не строка, а именно кусочки, поскольку знаки % % обрабатываются.

Кажется, для Ваших целей подойдёт такой скрипт:

var1 := "aaa"
var2 := "bbb"

#Include text.txt
MsgBox, %MyText%

Содержимое файла text.txt:

MyText = 
(
blabla %var1% blabla
blabla %var2% blabla
)

6

Re: AHK: Переменная в тексте файла

Можно регуляркой текст обрабатывать:

var := "b"
text := "a%var%c"
Pos := 1, match := ""
While Pos := RegExMatch(text, "s)%(.*?)%", match, Pos)
{
   text := RegexReplace(text, match, %match1%,,1, Pos)
   Pos += StrLen(%match1%)
}
msgbox % text

7

Re: AHK: Переменная в тексте файла

ypppu, спасибо, но это, в принципе, то же самое встраивание в код.
Malcev, спасибо, сложноватое на первый взгляд, но всё-таки решение.

8

Re: AHK: Переменная в тексте файла

Foma, зачем палитесь? Теперь все знают что Foma и Kurskador - одно и то же лицо.

9

Re: AHK: Переменная в тексте файла

А точно исключается, что два разных человека могут решать какие-то задачи вместе и иногда выходить с одного и того же компа?
  Тут не принципиально кто написал и кому ответили.

10

Re: AHK: Переменная в тексте файла

Не исключается.

11

Re: AHK: Переменная в тексте файла

Malcev пишет:

Можно регуляркой текст обрабатывать

Так не проще:

var = 777
var1 =
(
111 %var% 222
)

MsgBox, % var1 := RegExReplace(var1, "%var%", var)

?

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

12 (изменено: Foma, 2017-04-29 21:04:30)

Re: AHK: Переменная в тексте файла

Так

:= RegExReplace(var1, "%var%", var)

можно опустить.

13 (изменено: Malcev, 2017-04-29 20:35:11)

Re: AHK: Переменная в тексте файла

teadrinker, если конкретно только переменную var нужно заменить, то проще.
Но если уж говорить о простоте, то так ешё проще и быстрее:

var = 777
var1 =
(
111 %var% 222
)
MsgBox, % var1 := StrReplace(var1, "%var%", var)

14

Re: AHK: Переменная в тексте файла

Foma, расставьте точки в предложениях:
http://forum.script-coding.com/viewtopi … 43#p110043,
http://forum.script-coding.com/viewtopi … 33#p110533,
http://forum.script-coding.com/viewtopi … 90#p115490.

15 (изменено: Foma, 2017-04-29 21:16:08)

Re: AHK: Переменная в тексте файла

Сделал.
Malcev, интересно получилось. А если заранее неизвестны имена всех переменных в тексте?

16

Re: AHK: Переменная в тексте файла

Foma, вы определитесь уже, у вас текст или код. Если текст, то в нем не должно быть названий переменных.
Если код, обращайтесь как с кодом. То что тут сейчас наворотили выглядит жутко.

a := "Начало текста ", b := 2*21, c := ", еще текст."
d =
(
Много
строк
...
)
MsgBox % s := a b c "`n" d

17 (изменено: Malcev, 2017-04-29 22:03:03)

Re: AHK: Переменная в тексте файла

Foma пишет:

А если заранее неизвестны имена всех переменных в тексте?

Тогда используйте код из 6 поста.
Он заменяет все куски в тексте, обрамленные процентами на их значение.

stealzy пишет:

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

Вы же не знаете откуда этот текст берется.
Например, он может браться с веб-страницы, после чего с ним по какой-либо причине нужно проделать эти манипуляции.

18

Re: AHK: Переменная в тексте файла

Malcev пишет:

Тогда используйте код из 6 поста

Я бы не стал.

var := "b"
text := "это равно 20%, а то — 50% от общего количества"
Pos := 1, match := ""
While Pos := RegExMatch(text, "s)%(.*?)%", match, Pos)
{
   text := RegexReplace(text, match, %match1%,,1, Pos)
   Pos += StrLen(%match1%)
}
msgbox % text
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Переменная в тексте файла

Спасибо, рассмотрю 6 внимательней.

С "include" из 5 тоже не всё просто. Изменить значение потом нельзя.

var1 := "aaa"
var2 := "bbb"

#Include 1.txt
MsgBox, %MyText%

var1 := "111"
var2 := "222"

MsgBox, %MyText%

20

Re: AHK: Переменная в тексте файла

Что значит "изменить потом"? Вы хотели задать переменные и затем подставить их в текст.

var1 := "aaa"
var2 := "bbb"
#Include 1.txt
MsgBox, %MyText%

var1 := "111"
var2 := "222"
#IncludeAgain 1.txt
MsgBox, %MyText%

Так что ли?

21

Re: AHK: Переменная в тексте файла

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

22

Re: AHK: Переменная в тексте файла

Про "#IncludeAgain" даже не слышал. Вполне подходит, спасибо.
Надеюсь какая-то дополнительная нагрузка на память при большом количестве повторов не появляется?

23 (изменено: Malcev, 2017-04-29 23:23:59)

Re: AHK: Переменная в тексте файла

teadrinker, да, действительно.

var := "общего"
text := "это равно 20%, а то — 50% от %var% количества"
Pos := 1, match := ""
While Pos := RegExMatch(text, "s)(*UCP)%([\w#@$\x80-\x{10ffff}]{1,253})%", match, Pos)
{
   text := RegexReplace(text, match, %match1%,,1, Pos)
   Pos += StrLen(%match1%)
}
msgbox % text

24

Re: AHK: Переменная в тексте файла

Знак вопроса и квадратные скобки там лишние.

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

25

Re: AHK: Переменная в тексте файла

Исправил.

26 (изменено: stealzy, 2017-04-29 23:53:58)

Re: AHK: Переменная в тексте файла

Объясните мне, чем не устраивает нормальный подход?

a:="знаки процента и гравис надо экранировать", b:="а кавычки "" не надо"
x =
(
Тут разный текст
; %a% ``n 50`% `n
" %b% ""
)
MsgBox % x

Шаблон - есть, переменные - есть,
единственное что надо сделать —
1) в тексте перед использованием заменить все "`" на "``" и "%" на "`%".
2) перед текстом вставить две строки ( "x =" и "(" ) и после текста одну строку со скобкой.
Зачем изголяться с RegEx?