<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Перетасовка координат в переменной от n числа]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8833&amp;type=atom" />
	<updated>2013-10-29T19:45:45Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8833</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76677#p76677" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>n := 4, a := &quot;408,445|72,349|72,177|368,111|707,177|707,349&quot; 
MsgBox % ((p := InStr(a, &quot;|&quot;,,, n-1)) ? SubStr(a, p+1) &quot;|&quot; SubStr(a, 1, p-1) : a)</code></pre></div><p>Про &quot;Тернарный условный оператор&quot; я тебе давал ссылку.<br />То есть (p := InStr(a, &quot;|&quot;,,, n-1)) - это его условие. В данном случае результатом будет присвоение p. Если InStr вернёт 0, то будет ложь, и выполнится то что после :, то есть результат всего выражения просто будет равен а, то есть значению переменной а. Если InStr что то находит он вернёт позицию больше нуля, то есть условие будет правдой, и выполнится то что после ?, то есть SubStr(a, p+1) &quot;|&quot; SubStr(a, 1, p-1).<br />Это тоже самое что и запись:<br /></p><div class="codebox"><pre><code>
n := 4, a := &quot;408,445|72,349|72,177|368,111|707,177|707,349&quot; 

If (p := InStr(a, &quot;|&quot;,,, n-1)) != 0
    Res := SubStr(a, p+1) &quot;|&quot; SubStr(a, 1, p-1)
Else
    Res := a
MsgBox % Res
</code></pre></div><p>В примере InStr находит позицию третьего | (то есть n-1) в переменной а, и сохраняет его позицию в p.<br />Res := SubStr(a, p+1) &quot;|&quot; SubStr(a, 1, p-1)<br />Добавляем в строку результата: </p><p>. SubStr(a, p+1) начиная со следующего символа после р (p+1) и до конца вырезаем фрагмент.&nbsp; </p><p>. &quot;|&quot;&nbsp; добавляем разделитель.</p><p>. SubStr(a, 1, p-1) добавляем начало строки (a, <strong>1</strong>, p-1) до найденного | (a, 1, <strong>p-1</strong>).</p><p>Res := &quot;368,111|707,177|707,349&quot; + &quot;|&quot; + &quot;408,445|72,349|72,177&quot;</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-29T19:45:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76677#p76677</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76674#p76674" />
			<content type="html"><![CDATA[<p>Вроде понял логику.<br /><span style="color: lightgreen">Первый вариант:<br />1.Запомнить до.<br />2.запомнить после.<br />3.поменять местами.</span><br />В первом варианте 2 раза используется память.<br /><span style="color: green">Второй вариант:<br />1.Вырезать после.<br />2.Вставить до.</span><br />Во втором варианте 1 раз используется память.<br />По логике второй вариант быстрее.<br /><span style="color: Red">Уточните, если не правильно понял!</span><br />Спасибо!<br />Но это о логике.<br />А вот о конструкции записи я нечего не понял с того момента как начались функции.<br />Я только сообразил как они называются. Чтиво уже нашел.<br />Спасибо еще раз!</p>]]></content>
			<author>
				<name><![CDATA[OwnCorporation]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30359</uri>
			</author>
			<updated>2013-10-29T16:26:06Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76674#p76674</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76673#p76673" />
			<content type="html"><![CDATA[<p>Решение с RegExReplace:<br /></p><div class="codebox"><pre><code>n := 4, a := &quot;408,445|72,349|72,177|368,111|707,177|707,349&quot; 
MsgBox % Trim(RegExReplace(a, &quot;(.*?(?:.*?\||$){&quot; n-1 &quot;})(.*)&quot;, &quot;$2|$1&quot;), &quot;|&quot;)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-29T16:10:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76673#p76673</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76670#p76670" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>А теперь объясни его действие ТС&#039;у, раз он более простой вариант не понял</p></blockquote></div><p>По логике думаю даже проще. Если найден разделитель, составляем строку из: после, разделитель, начало.<br /></p><div class="quotebox"><blockquote><p>Верно, ограничение в 16Кб на длину строки.</p></blockquote></div><p>Почему всё таки 16Кб? Я знаю ограничение на 16383 символов на длину строки. А если текст переменных в AutoHotkey содержится в UTF-16 (2 байта на символ), то получится 8Кб, или я ошибаюсь?<br />---<br />Ради разминки, можно ли решить задачу с помощью только одного вызова RegExReplace, не могу сообразить шаблон.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-29T14:50:09Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76670#p76670</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76669#p76669" />
			<content type="html"><![CDATA[<p>Тоже хороший вариант, если длина строки неизвестна<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp; <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></div><div class="fancy_spoiler"><p> А теперь объясни его действие ТС&#039;у, раз он более простой вариант не понял</p></div></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2013-10-29T14:40:49Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76669#p76669</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76668#p76668" />
			<content type="html"><![CDATA[<p>Есть похожий вариант не дублировать строку:<br /></p><div class="codebox"><pre><code>
n := 4, a := &quot;408,445|72,349|72,177|368,111|707,177|707,349&quot; 
MsgBox % ((p := InStr(a, &quot;|&quot;,,, n-1)) ? SubStr(a, p+1) &quot;|&quot; SubStr(a, 1, p-1) : a)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-29T14:35:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76668#p76668</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76667#p76667" />
			<content type="html"><![CDATA[<p>Верно, ограничение в 16Кб на длину строки.</p><p>Можно n, можно n-1, смотря как рассматривать этот параметр. Если n взять за номер подстроки (по твоему выражению), то n-1.<br />Я рассматривал n как величину кругового сдвига начальной строки (для n=1 сдвиг на одну позицию, вторая координата становится первой и т.д.), поэтому подставил в выражение просто n.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2013-10-29T14:34:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76667#p76667</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76665#p76665" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>При этом предполагается, что длина строки Круговорот не превышает 8Кб</p></blockquote></div><p>Можешь пояснить, почему 8Кб?<br />Так понял тут ещё играет роль дублирование строки в SubStr.<br />---<br />Лучше наверное записать n-1. Чтобы n совпадало с номером подстроки которая должна стать первой в новой строке:<br /></p><div class="codebox"><pre><code>
n := 4, a := &quot;408,445|72,349|72,177|368,111|707,177|707,349&quot;
MsgBox % SubStr(a &quot;|&quot; a, InStr(a, &quot;|&quot;,,, n-1)+1, StrLen(a))
</code></pre></div><p>Вообще решение очень хорошее, не обращал до этого внимание на параметр Occurrence в InStr.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-29T14:13:12Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76665#p76665</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76662#p76662" />
			<content type="html"><![CDATA[<p>Попробую.<br />Итак, для простоты представим, что есть строка 12345, нужно из нее получить 34512, или 51234..., в зависимости, от сдвига. Удваиваем строку (1234512345), и затем вырезаем нужную часть - 12<strong><span class="bbu">34512</span></strong>345</p><p><strong>SubStr</strong> отвечает за вырезание, <strong>InStr</strong> ищет n-ный символ &quot;|&quot;, <strong>StrLen</strong> возвращает длину вырезаемой части - она равна исходной длине строки.</p>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2013-10-29T12:39:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76662#p76662</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76661#p76661" />
			<content type="html"><![CDATA[<p><strong>Irbis</strong><br />Спасибо!<br />Но для меня такая запись еще сложная.<br />Мог бы подробней объяснить. Что за чем происходит ?<br />MsgBox % <span style="color: red">Swap(Круговорот, 4) - Не понял!</span><br />Return</p><p><span style="color: red">Swap(a, n) { - Не понял!</span><br />&nbsp; &nbsp;<span style="color: red">Return SubStr(a &quot;|&quot; a, InStr(a, &quot;|&quot;,,,n)+1, StrLen(a)) - Не понял!</span><br />}</p>]]></content>
			<author>
				<name><![CDATA[OwnCorporation]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30359</uri>
			</author>
			<updated>2013-10-29T12:31:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76661#p76661</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76649#p76649" />
			<content type="html"><![CDATA[<p>Можно обойтись без цикла, склеить строку и вырезать нужный кусок ))</p><div class="codebox"><pre><code>Круговорот = 408,445|72,349|72,177|368,111|707,177|707,349
MsgBox % Swap(Круговорот, 4)
Return

Swap(a, n) {
   Return SubStr(a &quot;|&quot; a, InStr(a, &quot;|&quot;,,,n)+1, StrLen(a))
}</code></pre></div><p>При этом предполагается, что длина строки <em>Круговорот</em> не превышает 8Кб</p><p>Более кратко, без функции:<br /></p><div class="codebox"><pre><code>n := 4, a := &quot;408,445|72,349|72,177|368,111|707,177|707,349&quot;
MsgBox % SubStr(a &quot;|&quot; a, InStr(a, &quot;|&quot;,,,n)+1, StrLen(a))

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Irbis]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27384</uri>
			</author>
			<updated>2013-10-29T11:27:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76649#p76649</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76609#p76609" />
			<content type="html"><![CDATA[<p><a href="http://www.script-coding.com/AutoHotkey/Variables.1.0.46.07.html#2">Выражения</a><br />И там же &quot;Тернарный условный оператор&quot;.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-28T22:46:56Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76609#p76609</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76608#p76608" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Loop, parse, circle, |
    (A_index &gt;= FirstItem) ? (after .= A_LoopField &quot;|&quot;) : (before .= A_LoopField &quot;|&quot;)</code></pre></div><p>Спасибо еще раз!<br />А где можно прочитать про такую конструкцию записи ?</p>]]></content>
			<author>
				<name><![CDATA[OwnCorporation]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30359</uri>
			</author>
			<updated>2013-10-28T22:43:59Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76608#p76608</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76607#p76607" />
			<content type="html"><![CDATA[<p>Да действительно что то видимо глючит.</p><p>Твой вариант хорош, можно чуть короче записать:<br /></p><div class="codebox"><pre><code>
FirstItem = 4
circle = 408,445|72,349|72,177|368,111|707,177|707,349
 
Loop, parse, circle, |
    (A_index &gt;= FirstItem) ? (after .= A_LoopField &quot;|&quot;) : (before .= A_LoopField &quot;|&quot;)  
MsgBox, % reshuffle := SubStr( after before, 1, -1)
</code></pre></div><br /><p>Знал бы инглиш, то написал бы <em>Lexikos`у</em> о проблеме в команде Sort.</p><p><strong>up:</strong><br />Хотя скорее всего это я не понимаю что должна делать опция<br /></p><div class="quotebox"><blockquote><p>Pn: Sorts items based on character position n (do not use hexadecimal for n). If this option is not present, n defaults to 1, which is the position of the first character. The sort compares each string to the others starting at its nth character. If n is greater than the length of any string, that string is considered to be blank for the purpose of the sort. When used with option N (numeric sort), the string&#039;s character position is used, which is not necessarily the same as the number&#039;s digit position.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-10-28T22:17:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76607#p76607</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Перетасовка координат в переменной от n числа]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76606#p76606" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Number_start = 4
circle = 408,445|72,349|72,177|368,111|707,177|707,349

Sort, circle, P%Number_start% D|

MsgBox, % circle</code></pre></div><p>Не верно работает.<br />Получаю сортировку по первому числу в таком виде:<br />368,111|707,177|707,349|408,445|<strong>72,177|72,349</strong><br />Нужно в таком:<br />368,111|707,177|707,349|408,445|<strong>72,349|72,177</strong></p>]]></content>
			<author>
				<name><![CDATA[OwnCorporation]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30359</uri>
			</author>
			<updated>2013-10-28T21:41:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76606#p76606</id>
		</entry>
</feed>
