<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Передача строки A_LoopFileName в Max()]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14571</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14571&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Передача строки A_LoopFileName в Max()».]]></description>
		<lastBuildDate>Wed, 13 Feb 2019 20:02:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132177#p132177</link>
			<description><![CDATA[<p>Спасибо, надо будет почитать повнимательнее.</p>]]></description>
			<author><![CDATA[null@example.com (AndrasD)]]></author>
			<pubDate>Wed, 13 Feb 2019 20:02:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132177#p132177</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132176#p132176</link>
			<description><![CDATA[<p>Совершенно верно, границы строки принято обозначать двойными кавычками(&quot;Item 01&quot;), иначе, литералы воспринимаются интерпретатором как имена переменных. В вашем случае:<br /></p><div class="codebox"><pre><code>Max(Item 01, Item 02)</code></pre></div><p>Внутри круглых скобок подразумевается две операции конкатенации строки, состоящей из цифр, впереди-идущий ноль которой будет отброшен при математических операциях над ней:<br /></p><div class="codebox"><pre><code>MsgBox % 01 + 0</code></pre></div><p>И переменной &quot;Item&quot;, которая не была ранее объявлена, а потому, содержит &quot;пустое значение&quot;, что в результате аналогично тому, если бы эта операция не производилась. Эквивалент:<br /></p><div class="codebox"><pre><code>x := Item 01
y := Item 02
MsgBox % x &quot;`n&quot; y
MsgBox % x &gt; y ? &quot;Икс(&quot; . x + 0 . &quot;), больше игрек&quot; : &quot;Игрек(&quot; . y + 0 . &quot;), больше икс&quot;</code></pre></div><p>Вам будет полезно почитать о <a href="http://www.script-coding.com/AutoHotkey/Variables.1.0.46.07.html">переменных и выражениях</a>. Перевод старый, но актуальный.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 13 Feb 2019 17:51:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132176#p132176</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132175#p132175</link>
			<description><![CDATA[<p>Я пробовал Max(Item 01, Item 02) и он все делал корректно, значения, не являющиеся числом просто игнорируя. Или заменяя на пустое, что в данном случае не важно. Однако, когда точно такое же содержимое загружалось через переменную, ничего не получалось.<br />Но, как выяснилось, можно было получить максимальное значение и без сравнения всех файлов.<br />В любом случае, спасибо за помощь.</p>]]></description>
			<author><![CDATA[null@example.com (AndrasD)]]></author>
			<pubDate>Wed, 13 Feb 2019 16:53:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132175#p132175</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132174#p132174</link>
			<description><![CDATA[<div class="quotebox"><cite>AndrasD пишет:</cite><blockquote><p>1. Почему использована конструкция &quot;Item 0+?(\d+)\.png&quot;, а не просто &quot;Item *(\d+).png&quot;?</p></blockquote></div><p>Затрудняюсь ответить. Можно и так - <em>&quot;.*(\d+).*&quot;</em>. Наверно, нагляднее. Первое, что пришло в голову. Почему нет?<br /></p><div class="quotebox"><cite>AndrasD пишет:</cite><blockquote><p>2. Почему таки, вариант, приведенный мною в шапке не сработал? Max() не умеет пользоваться переменными?</p></blockquote></div><p>Честно говоря, впервые вижу эту функцию, но судя по её описанию, в качестве параметров она принимает только числовые значения, возвращая большее из них, при этом, вернёт пустую строку, если хотя бы одно из переданных значений не является числом. Мне кажется нагляднее и проще для этого, использовать тернарные операции, чем вызывать целую функцию.<br /></p><div class="quotebox"><cite>AndrasD пишет:</cite><blockquote><p>Если использовать просто A_LoopFileName, он всегда будет возвращать последнее имя, то есть, с максимальным номером?</p></blockquote></div><p>В такой структуре файлов:<br /></p><div class="codebox"><pre><code>
 - rootFolder
	* Item 01
	* Item 02
	* Item 03
	* Item 11
	* Item 22
	* Item 33
	 - innerFolder_1
		* Item 03
		* Item 04
		* Item 55
	 - innerFolder_2
		* Item 01
		* Item 02
		* Item 07
	 - innerFolder_3
		* Item 03
		* Item 04
		* Item 05
</code></pre></div><p>Последний вариант должен вернуть 55, в то время как последним файлом должен оказаться &quot;Item 05&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 13 Feb 2019 16:29:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132174#p132174</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132173#p132173</link>
			<description><![CDATA[<p>Спасибо! Механизм понятен, хотя есть пара вопросов.<br />1. Почему использована конструкция &quot;Item 0+?(\d+)\.png&quot;, а не просто &quot;Item *(\d+).png&quot;?<br />2. Почему таки, вариант, приведенный мною в шапке не сработал? Max() не умеет пользоваться переменными?</p><p>Ах да, ещё один вопрос. Если использовать просто A_LoopFileName, он всегда будет возвращать последнее имя, то есть, с максимальным номером?</p>]]></description>
			<author><![CDATA[null@example.com (AndrasD)]]></author>
			<pubDate>Wed, 13 Feb 2019 14:50:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132173#p132173</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132172#p132172</link>
			<description><![CDATA[<p>Хотя, если исследуются и подкаталоги и нужно среди всех найти максимальный номер, то, так:<br /></p><div class="codebox"><pre><code>
maxNumber := 0, newFilePattern := &quot;Item {:02}.png&quot;
Loop, Files, folder\Item*, R
	maxNumber := maxNumber &lt; (num := RegExReplace(A_LoopFileName, &quot;Item 0+?(\d+)\.png&quot;, &quot;$1&quot;))
							? num : maxNumber

MsgBox % Format(&quot;Максимальный нумератор - &#039;{}&#039;`nНовое имя файла - &#039;{}&#039;&quot;
										, maxNumber
										, Format(newFilePattern, maxNumber + 1))
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 13 Feb 2019 13:09:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132172#p132172</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132170#p132170</link>
			<description><![CDATA[<div class="codebox"><pre><code>
newFilePattern := &quot;Item {:02}.png&quot;
Loop, Files, folder\Item*, R
	lastItem := A_LoopFileName
lastNumber := RegExReplace(lastItem, &quot;Item 0+?(\d+)\.png&quot;, &quot;$1&quot;)
MsgBox % Format(&quot;Последний файл - &#039;{}&#039;`nЕго нумератор - &#039;{}&#039;`nНовое имя файла - &#039;{}&#039;&quot;
										, lastItem
										, lastNumber
										, Format(newFilePattern, lastNumber + 1))
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (KusochekDobra)]]></author>
			<pubDate>Wed, 13 Feb 2019 12:49:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132170#p132170</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=132168#p132168</link>
			<description><![CDATA[<p>Приветствую всех.<br />Суть в следующем: в заданной папке есть некоторое количество файлов типа Item 01.png, Item 02.png и т.д. Необходимо получить максимальное значение у имеющихся файлов с целью создания нового, но с номером на единицу больше. Попытался получить максимальное значение вот так:<br /></p><div class="codebox"><pre><code>Loop, Files, Item *, R
BegStr = %BegStr%%A_LoopFileName%,
StringTrimRight, MidStr, BegStr, 1
EndStr := StrReplace(MidStr, &quot;.png&quot;)
Info := Max(EndStr)
MsgBox, %Info%
return</code></pre></div><p>Однако, как задумано оно не работает. Вся проблема, в целом сводится к передаче строки, полученной с помощью A_LoopFileName в функцию Max(). И хотя она, в результате всего проделанного с ней, должна выглядеть понятно для Max(), у него с ней что-то не так.<br />И да, есть подозрение, что способ, которым я решил воспользоваться вообще далек от оптимального и можно это все сделать как-то проще.</p>]]></description>
			<author><![CDATA[null@example.com (AndrasD)]]></author>
			<pubDate>Wed, 13 Feb 2019 11:48:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=132168#p132168</guid>
		</item>
	</channel>
</rss>
