<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Передача строки A_LoopFileName в Max()]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14571&amp;type=atom" />
	<updated>2019-02-13T20:02:01Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14571</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132177#p132177" />
			<content type="html"><![CDATA[<p>Спасибо, надо будет почитать повнимательнее.</p>]]></content>
			<author>
				<name><![CDATA[AndrasD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39946</uri>
			</author>
			<updated>2019-02-13T20:02:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132177#p132177</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132176#p132176" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2019-02-13T17:51:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132176#p132176</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132175#p132175" />
			<content type="html"><![CDATA[<p>Я пробовал Max(Item 01, Item 02) и он все делал корректно, значения, не являющиеся числом просто игнорируя. Или заменяя на пустое, что в данном случае не важно. Однако, когда точно такое же содержимое загружалось через переменную, ничего не получалось.<br />Но, как выяснилось, можно было получить максимальное значение и без сравнения всех файлов.<br />В любом случае, спасибо за помощь.</p>]]></content>
			<author>
				<name><![CDATA[AndrasD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39946</uri>
			</author>
			<updated>2019-02-13T16:53:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132175#p132175</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132174#p132174" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2019-02-13T16:29:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132174#p132174</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132173#p132173" />
			<content type="html"><![CDATA[<p>Спасибо! Механизм понятен, хотя есть пара вопросов.<br />1. Почему использована конструкция &quot;Item 0+?(\d+)\.png&quot;, а не просто &quot;Item *(\d+).png&quot;?<br />2. Почему таки, вариант, приведенный мною в шапке не сработал? Max() не умеет пользоваться переменными?</p><p>Ах да, ещё один вопрос. Если использовать просто A_LoopFileName, он всегда будет возвращать последнее имя, то есть, с максимальным номером?</p>]]></content>
			<author>
				<name><![CDATA[AndrasD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39946</uri>
			</author>
			<updated>2019-02-13T14:50:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132173#p132173</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132172#p132172" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2019-02-13T13:09:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132172#p132172</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132170#p132170" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2019-02-13T12:49:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132170#p132170</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Передача строки A_LoopFileName в Max()]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=132168#p132168" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[AndrasD]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=39946</uri>
			</author>
			<updated>2019-02-13T11:48:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=132168#p132168</id>
		</entry>
</feed>
