<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Региональные настройки с помощью скрипта VBS]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10205&amp;type=atom" />
	<updated>2016-10-22T10:36:39Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10205</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=108479#p108479" />
			<content type="html"><![CDATA[<p>Забавно, поменял себе системный разделитель на запятую, vbscript продолжает воспринимать число с десятичной точкой, хотя при выводе и заменяет её на запятую. В VBA тоже самое. Наверное, если бы не использовал точку в качестве разделителя всё время своего общения с компьютером, уже знал бы о таком поведении(для меня не очевидном) - век живи, век учись <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Благодарю за разъяснение этого момента.</p><p>Правда мне это нужно в VBA для задания ширины колонок листбокса в сантиметрах - размер колонок сохранён в текстовой переменной, но часть размеров дробные. При не совпадающем с системным разделителем в этой строке, попытка присвоения свойства контролу вызывает ошибку. Можно было бы заменить сантиметры на твипы, но есть и другие ситуации когда нужно преобразовывать числовое значение из строки.</p><p>И хотя тестовые примеры подтверждают ваши слова, но мне будет спокойнее получать дробь непосредственно в коде <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. А может всё таки использую предложенный вами вариант записи(Mid(1.1, 2, 1) - лаконично, чёрт побери, и никакие объекты не используются!), и понаблюдаю как он будет себя вести на разных локалях у пользователей.</p><p>P.S. почему не пользуюсь чтением из реестра в этом случае - даже не знаю, может быть фобия, может быть желание найти &quot;кроссплатформенный&quot; вариант решения задачи <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2016-10-22T10:36:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=108479#p108479</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=108477#p108477" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>Региональные настройки влияют на формат чисел в vbscript.</p></blockquote></div><p>Нет.<br />Региональные настройки могут влиять на преобразование данных в/из строк(у/и).<br />На синтаксис языка программирования и, следовательно, на запись в коде литералов чисел они не влияют:<br /></p><div class="codebox"><pre><code>MsgBox 1.1</code></pre></div><p>(что неявно подразумевает<br /></p><div class="codebox"><pre><code>MsgBox CStr(1.1)</code></pre></div><p>) — всегда правильно, а от настроек уже зависит, что увидит пользователь: «1.1» или «1,1».</p><br /><p>…можно даже сократить до<br /></p><div class="codebox"><pre><code>DecDelimiter = Mid(1.1, 2, 1)</code></pre></div><div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>Тогда можно было бы ограничиться только <br /></p><div class="codebox"><pre><code>
DecDelimiter = &quot;.&quot;
</code></pre></div><p>Правда это не поможет на компе где десятичным разделителем работает запятая...</p></blockquote></div><p>Аналогия была бы верна, если бы я использовал строку, а не число:<br /></p><div class="codebox"><pre><code>DecDelimiter = Mid(&quot;1.1&quot;, 2, 1)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2016-10-22T09:04:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=108477#p108477</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=108472#p108472" />
			<content type="html"><![CDATA[<p><strong>wisgest</strong><br />С пунктом 2 согласен, как раз из-за подобной редкой но возможной региональной настройки вынужден был отказаться от старого метода(мог давать ошибку если в качестве десятичного разделителя и разделителя разрядов использовались оба символа). Но это легко поправить - вместо 1/10 приводить к строке 11/10:<br /></p><div class="codebox"><pre><code>
DecDilimiter = Mid(CStr(11 / 10), 2, 1)
</code></pre></div><p>Насчёт п.1 или я не что-то не понял, или одно из двух. Региональные настройки влияют на формат чисел в vbscript. Моя идея была в том, чтобы непосредственно в локали пользователя получить дробное число, и взять разделитель из него. Если я сразу в строке указываю символ разделителя, то зачем вся конструкция? Тогда можно было бы ограничиться только <br /></p><div class="codebox"><pre><code>
DecDelimiter = &quot;.&quot;
</code></pre></div><p>Правда это не поможет на компе где десятичным разделителем работает запятая...</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2016-10-22T05:01:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=108472#p108472</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=108458#p108458" />
			<content type="html"><![CDATA[<p><strong>BeS Yara</strong><br />1) Можно сразу «CStr(0.1)» вместо «CStr(1 / 10)» — региональные настройки на синтаксис VBScript не влияют.<br />2) Ответ будет неправильным, например, если в настройках задано не выводить нулевую целую часть числа, т.е. лучше<br /></p><div class="codebox"><pre><code>DecDelimiter = Mid(CStr(1.1), 2, 1)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2016-10-21T18:53:32Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=108458#p108458</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=108451#p108451" />
			<content type="html"><![CDATA[<p>Всегда использовал определение разделителя через отлов ошибки преобразования из строки, пока не наткнулся на забавную ситуацию с одной региональной настройкой, при которой мой метод ошибался. С реестром связываться не хотелось(хотя способ с реестром когда-то использовал), и тут в голову пришла простая идея как определить десятичный разделитель в системе без обращений к реестру:<br /></p><div class="codebox"><pre><code>
DecDilimiter = Mid(CStr(1 / 10), 2, 1)
</code></pre></div><p>Может кому-то пригодится как альтернатива <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2016-10-21T14:56:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=108451#p108451</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88820#p88820" />
			<content type="html"><![CDATA[<p>Спасибо. Это я и имел в виду. Я рассматривал обьект WshShell, а в нём метод чтения реестра, но какая ветвь в реестре отвечает за десятичный разделитель, я не нашёл. Спасибо, вы ответили.</p>]]></content>
			<author>
				<name><![CDATA[Олег]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27198</uri>
			</author>
			<updated>2014-12-02T15:25:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88820#p88820</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88818#p88818" />
			<content type="html"><![CDATA[<p>Никто. Потому как региональные настройки разделителей относятся к пользователям, а не к компьютеру.</p><p>Проверить для текущего пользователя можно, например, так:<br /></p><div class="codebox"><pre><code>WScript.Echo WScript.CreateObject(&quot;WScript.Shell&quot;).RegRead(&quot;HKCU\Control Panel\International\sDecimal&quot;)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-12-02T15:10:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88818#p88818</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Региональные настройки с помощью скрипта VBS]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88817#p88817" />
			<content type="html"><![CDATA[<p>Никто не подскажет, как с помощью скрипта VBS распознать, установлена на компе точка или запятая в качестве десятичного разделителя в числах? Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Олег]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27198</uri>
			</author>
			<updated>2014-12-02T14:43:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88817#p88817</id>
		</entry>
</feed>
