<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Регрессии и ошибки NXScript]]></title><description><![CDATA[<p dir="auto">Тема для репортов относительно NXScript, если кто заметил ошибки или странности не забывайте писать здесь.</p>
<ol>
<li>
<p dir="auto">пре инкремент<br />
работает как декремент</p>
</li>
<li>
<p dir="auto">uint32 conversion<br />
не работает данная конвертация</p>
</li>
<li>
<p dir="auto">парсер и "//"<br />
если в конце скрипта добавить комментарий с помощью</p>
</li>
</ol>
<pre><code>//
</code></pre>
<p dir="auto">то парсер выдаст ошибку</p>
<blockquote>
<p dir="auto">syntax error, unexpected '/', expecting $end</p>
</blockquote>
<p dir="auto">хотя на</p>
<pre><code>/* В конце*/
</code></pre>
<p dir="auto">парсер реагирует нормально</p>
<p dir="auto">большой скрипт не напишешь, постоянно Stack underflow...</p>
]]></description><link>https://forum.netxms.org/topic/1949/регрессии-и-ошибки-nxscript</link><generator>RSS for Node</generator><lastBuildDate>Fri, 13 Nov 2026 09:19:33 GMT</lastBuildDate><atom:link href="https://forum.netxms.org/topic/1949.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 22 Sep 2012 16:03:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Thu, 07 Feb 2013 09:44:52 GMT]]></title><description><![CDATA[<p dir="auto">ясно, просто добивание отсутствующих разрядов нулями, несколько не то что ожидаешь. спасибо.<br />
а использовать left не быстрее чем format?<br />
Не, не быстрее, одинаково, но писать кода чуть меньше.</p>
<pre><code>sub main()
{
if ($1 == null)
        $1 = 1.234567;

println format(round($1,2), 1, 2);
println typeof(format(round($1,2), 1, 2));
}
</code></pre>
<p dir="auto">и</p>
<pre><code>sub main()
{
if ($1 == null)
        $1 = 1.234567;

println left(round($1,2), 4);
println typeof(left(round($1,2), 4));
}
</code></pre>
<blockquote>
<p dir="auto">netxms# time nxadm -c "exec test"<br />
1.23<br />
real<br />
INFO: Script finished with rc=0</p>
<p dir="auto">0.000u 0.004s 0:00.10 0.0%      0+0k 0+0io 0pf+0w<br />
netxms# time nxadm -c "exec test2"<br />
1.23<br />
real<br />
INFO: Script finished with rc=0</p>
<p dir="auto">0.000u 0.004s 0:00.10 0.0%      0+0k 0+0io 0pf+0w</p>
</blockquote>
]]></description><link>https://forum.netxms.org/post/9580</link><guid isPermaLink="true">https://forum.netxms.org/post/9580</guid><dc:creator><![CDATA[SKYnv]]></dc:creator><pubDate>Thu, 07 Feb 2013 09:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Thu, 07 Feb 2013 07:09:08 GMT]]></title><description><![CDATA[<p dir="auto">Странно. Написал вот такой тестовый скрипт:</p>
<pre><code>C:\Source\NetXMS\x64\debug&gt;cat test13.nxsl
if ($1 == null)
        $1 = 1.234567;

println "floor(" . $1 . ") = " . floor($1);
println "ceil(" . $1 . ") = " . ceil($1);
println "round(" . $1 . ") = " . round($1);
println "round(" . $1 . ", 2) = " . round($1, 2);
</code></pre>
<p dir="auto">Результаты:</p>
<pre><code>C:\Source\NetXMS\x64\debug&gt;nxscript test13.nxsl
NetXMS Scripting Host  Version 1.2.6
Copyright (c) 2005-2012 Victor Kirhenshtein

floor(1.234567) = 1.000000
ceil(1.234567) = 2.000000
round(1.234567) = 1.000000
round(1.234567, 2) = 1.230000

C:\Source\NetXMS\x64\debug&gt;nxscript test13.nxsl 2.378
NetXMS Scripting Host  Version 1.2.6
Copyright (c) 2005-2012 Victor Kirhenshtein

floor(2.378) = 2.000000
ceil(2.378) = 3.000000
round(2.378) = 2.000000
round(2.378, 2) = 2.380000

C:\Source\NetXMS\x64\debug&gt;nxscript test13.nxsl 2.98
NetXMS Scripting Host  Version 1.2.6
Copyright (c) 2005-2012 Victor Kirhenshtein

floor(2.98) = 2.000000
ceil(2.98) = 3.000000
round(2.98) = 3.000000
round(2.98, 2) = 2.980000

C:\Source\NetXMS\x64\debug&gt;
</code></pre>
<p dir="auto">Т.е. round(x, 2) работает как описано. По поводу 0 в конце: после floor/ceil/round, тип данных у результата остается float - поэтомы и цифры после запятой. Это правильно, если число будет использоваться в дальнейших вычислениях. Для красивого форматирования числа можно использовать функцию format (<a href="http://wiki.netxms.org/wiki/NXSL:format" rel="nofollow ugc">http://wiki.netxms.org/wiki/NXSL:format</a>), отдельно или как обертку вокруг ceil/floor/round.</p>
<p dir="auto">Пример использования format:</p>
<pre><code>C:\Source\NetXMS\x64\debug&gt;cat test14.nxsl
if ($1 == null)
        $1 = 1.234567;

println "format(" . $1 . ", 1, 2) = " . format($1, 1, 2);
println "format(floor(" . $1 . "), 1, 0) = " . format(floor($1), 1, 0);

C:\Source\NetXMS\x64\debug&gt;
</code></pre>
<p dir="auto">Результаты:</p>
<pre><code>C:\Source\NetXMS\x64\debug&gt;nxscript test14.nxsl
NetXMS Scripting Host  Version 1.2.6
Copyright (c) 2005-2012 Victor Kirhenshtein

format(1.234567, 1, 2) = 1.23
format(floor(1.234567), 1, 0) = 1

C:\Source\NetXMS\x64\debug&gt;nxscript test14.nxsl 17.5672334
NetXMS Scripting Host  Version 1.2.6
Copyright (c) 2005-2012 Victor Kirhenshtein

format(17.5672334, 1, 2) = 17.57
format(floor(17.5672334), 1, 0) = 17

C:\Source\NetXMS\x64\debug&gt;
</code></pre>
]]></description><link>https://forum.netxms.org/post/9579</link><guid isPermaLink="true">https://forum.netxms.org/post/9579</guid><dc:creator><![CDATA[victor]]></dc:creator><pubDate>Thu, 07 Feb 2013 07:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Wed, 06 Feb 2013 20:06:37 GMT]]></title><description><![CDATA[<p dir="auto">round работает немножко некорректно.<br />
пример из вики</p>
<blockquote>
<p dir="auto">round(2.378, 2) -&gt;	2.38</p>
</blockquote>
<p dir="auto">то есть скрипт</p>
<pre><code>sub main()
{
println round(2.378, 2);
}
</code></pre>
<p dir="auto">но вернет следующее</p>
<blockquote>
<p dir="auto">netxmsd: exec test<br />
2.378000<br />
INFO: Script finished with rc=0</p>
</blockquote>
<p dir="auto">floor себя ведет также</p>
<pre><code>sub main()
{
println floor(2.378);
}
</code></pre>
<blockquote>
<p dir="auto">netxmsd: exec test<br />
2.000000<br />
INFO: Script finished with rc=0</p>
<p dir="auto">netxmsd:</p>
</blockquote>
<p dir="auto">это баг или фича? конечно можно отбрасывать лишнее left'ом но не кошерно же...</p>
]]></description><link>https://forum.netxms.org/post/9576</link><guid isPermaLink="true">https://forum.netxms.org/post/9576</guid><dc:creator><![CDATA[SKYnv]]></dc:creator><pubDate>Wed, 06 Feb 2013 20:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Mon, 01 Oct 2012 09:05:06 GMT]]></title><description><![CDATA[<pre><code>netxms# date &amp; nxadm -c "exec time"
понедельник,  1 октября 2012 г. 14:48:23 (YEKT)
1.9.2012, 14:48:23
INFO: Script finished with rc=0
</code></pre>
<p dir="auto">сам скрипт</p>
<pre><code>sub main()
{
println(localtime(time())-&gt;mday.".".localtime(time())-&gt;mon.".".localtime(time())-&gt;year.", ".localtime(time())-&gt;hour.":".localtime(time())-&gt;min.":".localtime(time())-&gt;sec);
}
</code></pre>
<p dir="auto">требуется уточнить, баг это или ошибка на моей стороне.</p>
]]></description><link>https://forum.netxms.org/post/8626</link><guid isPermaLink="true">https://forum.netxms.org/post/8626</guid><dc:creator><![CDATA[SKYnv]]></dc:creator><pubDate>Mon, 01 Oct 2012 09:05:06 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Mon, 24 Sep 2012 18:02:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/victor" aria-label="Profile: victor">@<bdi>victor</bdi></a> said in <a href="/post/8588">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<p dir="auto">Конструкция вида</p>
<pre><code>uint32(value);
</code></pre>
<p dir="auto">смысла не имеет - возвращается преобразованное значение, которое выбрасывается. Тогда надо писать так:</p>
<pre><code>value = uint32(value);
</code></pre>
<p dir="auto">По сути type cast можно рассматривать как специальные функции - они принимают одно значение и возвращают преобразованное значение.</p>
</blockquote>
<p dir="auto">ясно<br />
stack underflow вроде пропал, пока не удалось воспроизвести.<br />
буду баловаться дальше, спасибо.</p>
]]></description><link>https://forum.netxms.org/post/8593</link><guid isPermaLink="true">https://forum.netxms.org/post/8593</guid><dc:creator><![CDATA[SKYnv]]></dc:creator><pubDate>Mon, 24 Sep 2012 18:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Mon, 24 Sep 2012 15:27:09 GMT]]></title><description><![CDATA[<p dir="auto">Конструкция вида</p>
<pre><code>uint32(value);
</code></pre>
<p dir="auto">смысла не имеет - возвращается преобразованное значение, которое выбрасывается. Тогда надо писать так:</p>
<pre><code>value = uint32(value);
</code></pre>
<p dir="auto">По сути type cast можно рассматривать как специальные функции - они принимают одно значение и возвращают преобразованное значение.</p>
]]></description><link>https://forum.netxms.org/post/8588</link><guid isPermaLink="true">https://forum.netxms.org/post/8588</guid><dc:creator><![CDATA[victor]]></dc:creator><pubDate>Mon, 24 Sep 2012 15:27:09 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Mon, 24 Sep 2012 13:23:41 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/victor" aria-label="Profile: victor">@<bdi>victor</bdi></a> said in <a href="/post/8585">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<p dir="auto">Действительно, uint32(x) делал cast в int32. Опять copy/paste <img src="https://forum.netxms.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=72b86a538fc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:1.4em;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<p dir="auto">Пре-инкремент у меня работает как надо - я это уже исправлял. В аттаче свежесобранный интерпретатор для 32 битного Windows.</p>
</blockquote>
<p dir="auto">Видимо в этом была беда в старой теме про отрицательные значения ))</p>
<p dir="auto">сразу же уточнение, такой скрипт</p>
<pre><code>sub SmallTestUint32()
{
	value=1;
	uint32(value);
	println(typeof(value));
}
</code></pre>
<p dir="auto">выдаст</p>
<blockquote>
<p dir="auto">int32</p>
</blockquote>
<p dir="auto">, но зачем он снова конвертирует значение? Если оно попадает в область uint32?</p>
<pre><code>sub SmallTestUint32()
{
	value=1;
	uint32(value);
	println(typeof(uint32(value)));
}
</code></pre>
<p dir="auto">такой само собой</p>
<blockquote>
<p dir="auto">uint32</p>
</blockquote>
<p dir="auto">отрабатывает нормально.</p>
<p dir="auto">зачем вообще нужна такая конвертация, если такой скрипт</p>
<pre><code>sub SmallTestUint32()
{
	value=-1;
	uint32(value);
	println(value);
           println(typeof(value));
	println(typeof(uint32(value)));
	println(value);
	println(uint32(value));
	return value;
}
</code></pre>
<p dir="auto">выдаст</p>
<blockquote>
<p dir="auto">-1<br />
int32<br />
uint32<br />
-1<br />
4294967295</p>
</blockquote>
]]></description><link>https://forum.netxms.org/post/8587</link><guid isPermaLink="true">https://forum.netxms.org/post/8587</guid><dc:creator><![CDATA[SKYnv]]></dc:creator><pubDate>Mon, 24 Sep 2012 13:23:41 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Mon, 24 Sep 2012 09:51:29 GMT]]></title><description><![CDATA[<p dir="auto">Действительно, uint32(x) делал cast в int32. Опять copy/paste <img src="https://forum.netxms.org/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=72b86a538fc" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:1.4em;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<p dir="auto">Пре-инкремент у меня работает как надо - я это уже исправлял. В аттаче свежесобранный интерпретатор для 32 битного Windows.</p>
<hr />
<p dir="auto"><a href="/assets/uploads/files/smf/0000000000918-libnxsl.dll">libnxsl.dll</a></p>
]]></description><link>https://forum.netxms.org/post/8585</link><guid isPermaLink="true">https://forum.netxms.org/post/8585</guid><dc:creator><![CDATA[victor]]></dc:creator><pubDate>Mon, 24 Sep 2012 09:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Sun, 23 Sep 2012 11:57:08 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/victor" aria-label="Profile: victor">@<bdi>victor</bdi></a> said in <a href="/post/8574">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<p dir="auto">Это скорее всего следствие одной из ошибок. Можете привести пример скрипта, который дает stack underflow?</p>
</blockquote>
<p dir="auto">честно говоря, наверно с десяток скриптов всех и не упомнишь. Вот свежий пример, ошибка возникает из-за условия  i!=-10, вернее из-за отрицательного числа и не важно инкремент или декремент мы используем.</p>
<pre><code>sub CheckPreInc()
{
	for(i=0;i!=-10;i++)
	{
		println(i);
	}
}
</code></pre>
<p dir="auto">еще один скрипт во вложении, там ошибка возникает из-за процедуры которая вообще не должна никак влиять на скрипт так-как она ни разу не выполниться.</p>
<p dir="auto">далее</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/victor" aria-label="Profile: victor">@<bdi>victor</bdi></a> said:</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/skynv" aria-label="Profile: skynv">@<bdi>skynv</bdi></a> said:</p>
<blockquote>
<ol start="2">
<li>uint32 conversion<br />
не работает данная конвертация</li>
</ol>
</blockquote>
<p dir="auto">А можно пример скрипта?</p>
</blockquote>
<p dir="auto">например такой</p>
<pre><code>sub TestUInt32()
{
	UvalMax=65535;
	UvalMin=0;
	uint32(UvalMax);
	uint32(UvalMin);
	resVal = false;
	if ((typeof(UvalMax) == "uint32") &amp;&amp; (typeof(UvalMin) == "uint32"))
	{
		println("uint32 range check ok");
	}
	else
	{
		println("uint32 range check failed");
     	println(typeof(UvalMax));
     	println(typeof(UvalMin));
    }
}
</code></pre>
<p dir="auto">причем даже если мы сначала инициализируем её так</p>
<pre><code>sub SmallTestUint32()
{
	uint32(value);
	value=1;
	println(typeof(value));
	return 0;
}
</code></pre>
<p dir="auto">И даже так</p>
<pre><code>sub SmallTestUint32()
{
	uint32(value);
	value=1;
	println(typeof(uint32(value)));
	return 0;
}
</code></pre>
<p dir="auto">А можно мне для win32 собранные nxscript с нужными либами прикреплять сюда, а то до сборки под win32 у меня еще руки не дошли. Я себе сделал для удобства подсветку в EmEditor и интерпретатор прикрутил. Ну и на wiki немножко похозяйничал в разделе functions.<br />
Ну и пока руки не дошли, но помоему sleep() работает несколько не адекватно.</p>
<hr />
<p dir="auto"><a href="/assets/uploads/files/smf/0000000000915-test.nx">test.nx</a></p>
<p dir="auto"><img src="/assets/uploads/files/smf/0000000000916-2012-09-23_00001.jpg" alt="2012-09-23_00001.jpg" class="img-markdown  img-fluid" width="725" height="750" /></p>
]]></description><link>https://forum.netxms.org/post/8577</link><guid isPermaLink="true">https://forum.netxms.org/post/8577</guid><dc:creator><![CDATA[SKYnv]]></dc:creator><pubDate>Sun, 23 Sep 2012 11:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to Регрессии и ошибки NXScript on Sun, 23 Sep 2012 09:40:08 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/skynv" aria-label="Profile: skynv">@<bdi>skynv</bdi></a> said in <a href="/post/8573">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<ol>
<li>пре инкремент<br />
работает как декремент</li>
</ol>
</blockquote>
<p dir="auto">Исправил.</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/skynv" aria-label="Profile: skynv">@<bdi>skynv</bdi></a> said in <a href="/post/8573">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<ol start="2">
<li>uint32 conversion<br />
не работает данная конвертация</li>
</ol>
</blockquote>
<p dir="auto">А можно пример скрипта?</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/skynv" aria-label="Profile: skynv">@<bdi>skynv</bdi></a> said in <a href="/post/8573">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<ol start="3">
<li>парсер и "//"<br />
если в конце скрипта добавить комментарий с помощью</li>
</ol>
<pre><code>//
</code></pre>
<p dir="auto">то парсер выдаст ошибку</p>
<blockquote>
<p dir="auto">syntax error, unexpected '/', expecting $end</p>
</blockquote>
<p dir="auto">хотя на</p>
<pre><code>/* В конце*/
</code></pre>
<p dir="auto">парсер реагирует нормально</p>
</blockquote>
<p dir="auto">Исправил.</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/skynv" aria-label="Profile: skynv">@<bdi>skynv</bdi></a> said in <a href="/post/8573">Регрессии и ошибки NXScript</a>:</p>
<blockquote>
<p dir="auto">большой скрипт не напишешь, постоянно Stack underflow...</p>
</blockquote>
<p dir="auto">Это скорее всего следствие одной из ошибок. Можете привести пример скрипта, который дает stack underflow?</p>
]]></description><link>https://forum.netxms.org/post/8574</link><guid isPermaLink="true">https://forum.netxms.org/post/8574</guid><dc:creator><![CDATA[victor]]></dc:creator><pubDate>Sun, 23 Sep 2012 09:40:08 GMT</pubDate></item></channel></rss>