<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK : Регулярные выражения]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15999&amp;type=atom" />
	<updated>2021-01-19T16:42:03Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15999</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145064#p145064" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Тут надо всё переписывать</p></blockquote></div><p>Этот ответ меня впринципе удовлетворит, Вы дали понять, что ошибка была допущена в самом начале, буду искать.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>а вы далеко отошли от темы.</p></blockquote></div><p>Согласен, я столкнулся с трудностями использования регулярных выражений и я получил на это ответ.</p><p>Спасибо всем, кто откликнулся, за помощь.</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T16:42:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145064#p145064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145063#p145063" />
			<content type="html"><![CDATA[<p>Тут надо всё переписывать, а вы далеко отошли от темы.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2021-01-19T16:38:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145063#p145063</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145062#p145062" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>(зачем тогда там цикл)</p></blockquote></div><p>Мне нужно после нажатия определенного хоткея, который вызывает функцию AutoScreen() ждать до момента обнаружения {1e90ff}Вы вылечили ,<br />а кроме использования цикла для непрерывной проверки мне ничего больше в голову не пришло.</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T16:37:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145062#p145062</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145060#p145060" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, сейчас постараюсь объяснить.<br />У меня имеется функция GetNewLine()<br /></p><div class="codebox"><pre><code>GetNewLine(filename) {
    static old
    static new

    if !old {
        FileGetSize, old, %filename%
        new := old
    }

    while old = new {
        sleep 100 ;задержка
        FileGetSize, new, %filename%
    }

    old := new
    Loop, read, %filename%
    if A_LoopReadLine {
            last := A_LoopReadLine
    }
    return last
}</code></pre></div><p>Писал я её не сам, брал готовую. Каждые 100мс сравнивается размер файла chatlog.txt, и если в нём обнаружены изменения - то последняя строка присваивается переменной.<br />Далее в функции AutoScreen()<br /></p><div class="codebox"><pre><code>AutoScreen() {
    ChatLog = C:\Users\%A_UserName%\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
    
    Loop,
    { 
        var := GetNewLine(ChatLog)
        If InStr(var, &quot;{1e90ff}Вы вылечили &quot;)
            {
                SendChat(&quot;/время&quot;)
                Sleep 100
                SendInput, {F8}
            }
        Break
    }
}</code></pre></div><p>Эта строка проверяется на наличие {1e90ff}Вы вылечили , и если это так - то выполняется <br /></p><div class="codebox"><pre><code>{
	SendChat(&quot;/время&quot;)
	Sleep 100
	SendInput, {F8}
}</code></pre></div><p>Возможно я изначально действовал неправильно, и можно как-то объединить GetNewLine() и AutoScreen() в одну функцию?</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T16:33:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145060#p145060</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145059#p145059" />
			<content type="html"><![CDATA[<p>Я думал цикл перебирает по одной строке, если не так (зачем тогда там цикл), то это надо весь код смотреть.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2021-01-19T16:24:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145059#p145059</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145058#p145058" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>На последней строке ChatLog.</p></blockquote></div><p>ChatLog ведь за пределами цикла, он в самом начале функции, или я что-то совсем не понимаю?<br /></p><div class="codebox"><pre><code>AutoScreen() {
    ChatLog = C:\Users\%A_UserName%\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
    Loop, {
    var := GetNewLine(ChatLog)
    
    If InStr(var, &quot;{1e90ff}Вы вылечили &quot;)
        {
            SendChat(&quot;/время&quot;)
            Sleep 100
            SendInput, {F8}
        }
    Break
    }
}</code></pre></div><p>Break у меня перед закрывающей } в цикле, это должно быть как-то иначе?</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T16:12:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145058#p145058</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145056#p145056" />
			<content type="html"><![CDATA[<p>На последней строке ChatLog.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2021-01-19T15:58:14Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145056#p145056</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145054#p145054" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Его надо вызвать на последней строке</p></blockquote></div><p>Но я же его и вызываю на последней строке цикла, разве не так?</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T15:54:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145054#p145054</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145053#p145053" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>v413ry4nk4 пишет:</cite><blockquote><p>только один раз</p></blockquote></div><p>А как ещё, если Break сразу применять. <br />Его надо вызвать на последней строке, или когда вам там надо.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2021-01-19T15:50:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145053#p145053</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145051#p145051" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong><br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Что нибудь с кодировкой файла.</p></blockquote></div><p>Да, после сохранения в UTF8+BOM <br /></p><div class="codebox"><pre><code>If InStr(var, &quot;{1e90ff}Вы вылечили &quot;)</code></pre></div><p>заработал.<br />По поводу завершения цикла, я попробовал завершить его командой Break, <br /></p><div class="codebox"><pre><code>AutoScreen() {
    ChatLog = C:\Users\%A_UserName%\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
    Loop, {
    var := GetNewLine(ChatLog)
    
    If InStr(var, &quot;{1e90ff}Вы вылечили &quot;)
        {
            SendChat(&quot;/время&quot;)
            Sleep 100
            SendInput, {F8}
        }
    Break
    }
}</code></pre></div><p>Но по итогу функция выполняется только один раз, хотя хоткей уже не блокируется. Т.е. хоткей выполняется повторно, но функция&nbsp; AutoScreen уже не срабатывает,&nbsp; не посылает нажатие F8. В чём может быть проблема?<br />P.S: добавление Return перед последней&nbsp; } ситуации не меняет.</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T15:48:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145051#p145051</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145041#p145041" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>v413ry4nk4 пишет:</cite><blockquote><p>ни в какую не хочет работать</p></blockquote></div><p>Что нибудь с кодировкой файла.<br /></p><div class="quotebox"><cite>v413ry4nk4 пишет:</cite><blockquote><p>с помощью функции, но она выполняется единожды</p></blockquote></div><p>У вас Loop не завершается.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2021-01-19T14:37:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145041#p145041</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145039#p145039" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong>, сейчас проверил 2 ваших варианта. На удивление, вариант с <br /></p><div class="codebox"><pre><code>If InStr(var, &quot;{1e90ff}Вы вылечили &quot;)</code></pre></div><p>ни в какую не хочет работать, а вот с использованием <br /></p><div class="codebox"><pre><code>If RegExMatch(var, &quot;(*UCP)\{[a-f0-9]{6}\}\s*([\w\s]+?)\s*\{&quot;, m)
&amp;&amp; m1 ~= &quot;i)^Вы вылечили$&quot;</code></pre></div><p>частично заработал. Сейчас объясню, почему частично.<br />У меня имеются строки такого вида:<br /></p><div class="codebox"><pre><code>$Numpad4::
	IniRead, num4_1, actions.ini, Адреналин, num4_1
	Sleep 100
	{
		SendChat(num4_1)
	}
	Sleep 100
	{
		AutoHeal_25()
	}
	Sleep 500
	{
		AutoScreen()
	}
	Return</code></pre></div><p>где<br /></p><div class="codebox"><pre><code>AutoScreen() {
	ChatLog = C:\Users\%A_UserName%\Documents\GTA San Andreas User Files\SAMP\chatlog.txt
	Loop, {
	var := GetNewLine(ChatLog)
	
	If RegExMatch(var, &quot;(*UCP)\{[a-f0-9]{6}\}\s*([\w\s]+?)\s*\{&quot;, m)
	&amp;&amp; m1 ~= &quot;i)^Вы вылечили$&quot;
		{
    		SendChat(&quot;/время&quot;)
    		Sleep 100
    		SendInput, {F8}
		}
	}
	Return
}</code></pre></div><p>Я решил реализовать это с помощью функции, но она выполняется единожды. При повторном вызове Numpad4 скрипт не реагирует, как будто клавиша и не назначена хоткеем. Таких хоткеев у меня 52, и в каждом должна выполнятся эта функция. На всех она срабатывает единожды. Как можно это решить? Мне нужно, чтобы после выполнения кода на Numpad4 либо любой-другой хоткей он оставался рабочим и я мог повторно вызвать этот код. Зараннее спасибо.</p>]]></content>
			<author>
				<name><![CDATA[v413ry4nk4]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41375</uri>
			</author>
			<updated>2021-01-19T13:46:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145039#p145039</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145036#p145036" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong> Понял.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-01-19T11:54:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145036#p145036</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145035#p145035" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Botsy пишет:</cite><blockquote><p>Используется для повышения производительности</p></blockquote></div><p>Я имел ввиду производительность падает в сравнении с поиском ANSI, то есть без (*UCP).<br /></p><div class="quotebox"><cite>Botsy пишет:</cite><blockquote><p>выглядит противоречиво: сначала мы ищем согласно общему шаблону, а потом на 100% совпадение</p></blockquote></div><p>По ТЗ нужен только InStr, пример с RegEx, это про то когда есть несколько вариантов строки, сначала один раз определяем что в ней, а далее просто сравниваем со своими вариантами.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2021-01-19T11:49:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145035#p145035</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK : Регулярные выражения]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145034#p145034" />
			<content type="html"><![CDATA[<p><strong>serzh82saratov</strong> Про UCP прочитал в справке:</p><p><em>(*UCP) Используется для повышения производительности \ d, \ D, \ s, \ S, \ w, \ W, \ b и \ B по умолчанию распознают только символы ASCII, даже в кодировке Unicode. Если шаблон начинается с (* UCP), свойства Unicode будут использоваться для определения совпадающих символов. Например, \ w становится эквивалентным [\ p {L} \ p {N} _], а \ d становится эквивалентным \ p {Nd}.</em><br />Не знаю что за шаблон [\ p {L} \ p {N} _], но подумал про ускорение работы из-за замены совпадений. </p><div class="quotebox"><blockquote><p>Нет, это после RegExMatch проверяет найденное на полное соответствие указанной строке в любом регистре.</p></blockquote></div><p>Мы в переменной ищем совпадение согласно заданному рег. шаблону и если мы такое нашли, зачем нам проверять это на полное соответствие? Просто выглядит противоречиво: сначала мы ищем согласно общему шаблону, а потом на 100% совпадение. Не легче ли изначально тогда искать по шаблону {динамический цвет} + вы вылечили ? <br />Ну а если поиск всегда статический, то получается надо использовать ваш второй вариант с InStr.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-01-19T11:40:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145034#p145034</id>
		</entry>
</feed>
