<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Spintax с несколькими уровнями вложенности]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17528&amp;type=atom" />
	<updated>2022-12-26T10:03:34Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=17528</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Spintax с несколькими уровнями вложенности]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=156126#p156126" />
			<content type="html"><![CDATA[<p>Все работает. Проверил на более сложной вариации текста, все идеально рандомизирует. Просто нет слов! Большое вам спасибо уважаемый <strong>teadrinker</strong>, не первый раз выручаете меня!</p>]]></content>
			<author>
				<name><![CDATA[ppss42]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41305</uri>
			</author>
			<updated>2022-12-26T10:03:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=156126#p156126</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Spintax с несколькими уровнями вложенности]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=156125#p156125" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ppss42 пишет:</cite><blockquote><p>Да, действительно )</p></blockquote></div><p>Ознакомьтесь, пожалуйста, с <a href="https://forum.script-coding.com/misc.php?action=rules">Правилами</a>, отредактируйте свой пост. Обратите внимание на <a href="https://forum.script-coding.com/misc.php?action=rules#literacy">точки</a> в конце предложений.<br />Вроде так работает:<br /></p><div class="codebox"><pre><code>text = {Привет {Артем|Владимир}. Как твои дела?|Здравствуй {Света|Маша}. Чем занята?}
randomText := text
while RegExMatch(randomText, &quot;xO)( \{ (?: [^{}]++ | (?-1) )* } )&quot;, m)
   randomText := SubStr(randomText, 1, m.Pos - 1) . GetRandomText(SubStr(m[0], 2, -1)) . SubStr(randomText, m.Pos + m.Len)

MsgBox, % randomText

GetRandomText(text) {
   newText := RegExReplace(text, &quot;(\{|(?!^)\G)((?!}).)*?\K\|&quot;, Chr(1))
   arr := StrSplit(newText, &quot;|&quot;)
   Random, rand, 1, arr.Count()
   Return StrReplace(arr[rand], Chr(1), &quot;|&quot;)
}</code></pre></div><p>Особо не тестировал.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-12-26T09:52:38Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=156125#p156125</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Spintax с несколькими уровнями вложенности]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=156124#p156124" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong><br />Да, действительно. Проглядел. Возможно такой пример будет правильнее: <br />&quot;{привет {Артем|Владимир}. Как твои дела?|Здравствуй {Света|Маша}. Чем занята?}&quot;<br />Т.е. на выходе будет какое то одно предложение. Например &quot;Привет Артем. Как твои дела?&quot; либо &quot;Здравствуй Маша. Чем занята?&quot; Проверил на первом попавшемся онлайн сервисе по рандомизации текста, и он выдает правильную вариацию, но в приведенном выше скрипте, это не срабатывает. Искал решение на зарубежном форуме и ничего не нашел.</p>]]></content>
			<author>
				<name><![CDATA[ppss42]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41305</uri>
			</author>
			<updated>2022-12-26T08:48:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=156124#p156124</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Spintax с несколькими уровнями вложенности]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=156123#p156123" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ppss42 пишет:</cite><blockquote><p>{Привет|Здравствуй} {Ты сейчас {дома|на улице|в кафе}}?</p></blockquote></div><p>По-моему, здесь одна пара скобок лишняя:<br /></p><div class="quotebox"><blockquote><p>{Привет|Здравствуй} Ты сейчас {дома|на улице|в кафе}?</p></blockquote></div><p>Или я чего-то не понимаю?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-12-26T08:17:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=156123#p156123</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Spintax с несколькими уровнями вложенности]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=156120#p156120" />
			<content type="html"><![CDATA[<p>Здравствуйте. Подскажите пожалуйста, как реализовать spintax на ahk с несколькими уровнями вложенности? На просторах рунета находил спинтакс, но он работает по типу &quot;{Привет|Хай}&quot; а мне необходимо как в примере ниже:<br />&quot;{Привет|Здравствуй} {Ты сейчас {дома|на улице|в кафе}}?&quot;<br />Скрипт который я пытался использовать:<br /></p><div class="codebox"><pre><code>string = {Привет|Здравствуй}
MsgBox % spintax(string)

spintax(string) {
	Pos := 1
	while (Pos := RegExMatch(string, &quot;{([^}]*)}&quot;, M, Pos + StrLen(R)))
		string := StrReplace(string, M, R := getRandomElement(StrSplit(M1, &quot;|&quot;)))

	return string
}

getRandomElement(Arr) {
	Random rand, 1, % Arr.Count()
	return Arr.RemoveAt(rand)
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[ppss42]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41305</uri>
			</author>
			<updated>2022-12-26T02:58:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=156120#p156120</id>
		</entry>
</feed>
