<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript -> VBScript: Объекты на VBScript]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5061</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5061&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript -> VBScript: Объекты на VBScript».]]></description>
		<lastBuildDate>Wed, 20 Oct 2010 17:58:13 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40647#p40647</link>
			<description><![CDATA[<p>Всем спасибо. В оконцовке изначально запрошенные способы обращения с объектами в VBScript не понадобились. Точнее, при решении данной частной задачи чтения ini-файла может случится сбой ввиду того, что объекты VBScript не понимают русских имен переменных. <br />Обратите внимание на пример: вытащить свойство объекта INI с русскими именами типа INI.ляляля.бебебе - не выйдет. А в JScript - это работает на ура. Аналогично в примере с WSF, стоит заменить переменную <strong>str</strong> на русское буквосочетание <strong>стр</strong> - тоже будет ошибка. <br />Кстати и помимо данного обстаятельства, использования WSF для меня не очень удачное решение, так как я считаю, что смешивать оба варианта скриптов - не есть гууд. Более разумно придерживаться какого-то одного варианта привычного языка с читабельным текстом. WSF хорош все таки для создания библиотек или уж совсем нерешаемой экзотики.<br />Так или иначе вариант скрипта на JScript, который читает INI-файлы, удалось перевести на VBScript используя объект <strong>Dictionary</strong><br />Приведу код, может кого заинтересует<br /></p><div class="codebox"><pre><code>Option Explicit
Dim d
Set d = ReadINIFile(&quot;C:\Program Files\Totalcmd\Wincmd.ini&quot;) &#039; Целевой объект
Msgbox d.Item(&quot;Configuration&quot;).Item(&quot;Editor&quot;)
WScript.Quit

Function ReadINIFile(sIniFile)
    Dim section, aL, i, oIni
    Set oIni = CreateObject(&quot;Scripting.Dictionary&quot;)
    with CreateObject(&quot;Scripting.FileSystemObject&quot;)
        if .FileExists(sIniFile) And .GetFile(sIniFile).Size &gt; 0 then aL = Split(.OpenTextFile(sIniFile).ReadAll(), vbCrLf)
    end with
    if IsArray(aL) then
        with CreateObject(&quot;VBScript.RegExp&quot;)
            .Global = True
            for i = 0 to UBound(aL)
                .Pattern = &quot;^\[(\w+)\]&quot;
                if .Test(aL(i)) = True then 
                    section = .Replace(aL(i), &quot;$1&quot;)
                    oIni.Add section, CreateObject(&quot;Scripting.Dictionary&quot;)
                end if                
                .Pattern = &quot;^([^;#][^=]*?)\s*=\s*([^\r\n]*?)\s*$&quot;
                 On Error resume next
                 if .Test(aL(i)) = True then oIni.Item(section).Add .Replace(aL(i), &quot;$1&quot;), .Replace(aL(i), &quot;$2&quot;)
            next
        end with
    end if
    Set ReadINIFile = oIni: Set oIni = Nothing: Set aL = Nothing
End Function</code></pre></div><p>Пример обращения к целевому объекту по аналогии с исходником на JScript оставлен только один, хотя конечно тему развить можно и далее</p><p>Сравните: <strong>WScript.Echo(INI.Configuration.Editor);</strong> и <strong>d.Item(&quot;Configuration&quot;).Item(&quot;Editor&quot;)</strong><br />По моему вполне сопоставимые по удобству обращения к переменной Editor заключенной в секции Configuration.</p><p>P.S. Если применять русскоязычные названия секций и/или переменных в тестовом INI-файле, то в моем варианте почему-то выскакивает ошибка, хотя теоретически объект Dictionary такие названия ключей вполне допускает.</p>]]></description>
			<author><![CDATA[null@example.com (Sphinx70)]]></author>
			<pubDate>Wed, 20 Oct 2010 17:58:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40647#p40647</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40626#p40626</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>А вот просто попросить запускать скрипт в нужный момент щелком мыши - на это сговорится не сложно.</p></blockquote></div><p>Пользователю разрешено запускать WSF-файлы? Тогда внечите тот JS-файл в WSF, а остальную работу выполняйте на VBScript:<br />Вот минимальный код<br /></p><div class="codebox"><pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;package&gt;
&lt;job id=&quot;wsf&quot;&gt;
&lt;script language=&quot;javascript&quot;&gt;&lt;![CDATA[
var INI = {
    str: &#039;string&#039;, 
    boo: true, 
    num: Math.PI, 
    arr: [1, 2, 3], 
    obj: {a: 1}, 
    nul: null
};
]]&gt;&lt;/script&gt;
&lt;script language=&quot;vbscript&quot;&gt;&lt;![CDATA[
WScript.Echo(INI.str)
WScript.Echo(INI.boo)
WScript.Echo(INI.num)
WScript.Echo(INI.arr)
WScript.Echo(INI.obj.a)
WScript.Echo(INI.nul)
]]&gt;&lt;/script&gt;
&lt;/job&gt;
&lt;/package&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 20 Oct 2010 10:43:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40626#p40626</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40618#p40618</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?id=4177">VBScript: Создание пользовательского объекта</a><br /><a href="http://forum.script-coding.com/viewtopic.php?id=1245">VBScript: использование собственных классов</a></p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Wed, 20 Oct 2010 10:10:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40618#p40618</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40616#p40616</link>
			<description><![CDATA[<p>AutoItX3.dll - не наш метод, хотя бы потому, что конечный скрипт пишется не для себя, а для распространения. Хочется избежать инструкций пользователям на тему как зарегистрировать стороннюю dll на компе к которому у меня нет доступа, а у пользователя к тому же могут быть ограничены права. А вот просто попросить запускать скрипт в нужный момент щелком мыши - на это сговорится не сложно.</p><p>Dictionary может быть и подойдет - надо покопать, но уж больно приведенный вариант на JSCript красиво и лаконично смотрится. Неужели прямого аналога создания ПУСТОГО объекта в VBScript нет?</p>]]></description>
			<author><![CDATA[null@example.com (Sphinx70)]]></author>
			<pubDate>Wed, 20 Oct 2010 09:51:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40616#p40616</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40614#p40614</link>
			<description><![CDATA[<p><a href="http://msdn.microsoft.com/en-us/library/x4k5wbx4%28VS.85%29.aspx">Dictionary</a>?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 20 Oct 2010 08:44:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40614#p40614</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40612#p40612</link>
			<description><![CDATA[<p>OFF: Я не забиваю себе голову и пользуюсь сторонними библиотеками, например <a href="http://www.script-coding.com/AutiItX.html">AutoItX3.dll</a>: IniDelete, IniRead, IniWrite.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 20 Oct 2010 08:24:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40612#p40612</guid>
		</item>
		<item>
			<title><![CDATA[JScript -> VBScript: Объекты на VBScript]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=40610#p40610</link>
			<description><![CDATA[<p>Прочитал веточку в этом форуме <a href="http://forum.script-coding.com/viewtopic.php?pid=31342">JScript: Чтение INI файлов</a>.<br />Приведенный пример функции работы с INI файлами мне как раз и нужен, но есть небольшая проблема - нет практического опыта работы на JScript. Смысл функции мне понятен, но не совсем понятно, как&nbsp; реализовать аналог на VBScript. Т.е. конкретнее вопрос можно упростить - не всю функцию переделывать, а хотя бы как управлятся с объектами на VBScript? <br />Например, как подобный код JScript реализовать на VBScript?</p><div class="codebox"><pre><code>var INI = {}; // В этом объекте INI будет че-то хранится
var section, param, value;

// Формируем первое значение объекта
section = &quot;ляляля&quot;;
INI[section] = {};
param = &quot;бебебе&quot;;
value = &quot;Значение!&quot;;
INI[section][param] = value;

WScript.Echo(INI.ляляля.бебебе);   // Проверяем, что значение на месте

// Формируем второе значение объекта
section = &quot;тратата&quot;;
INI[section] = {};
param = &quot;вот_это_да&quot;;
value = &quot;Уряяя!&quot;;
INI[section][param] = value;

WScript.Echo(INI.ляляля.бебебе);    // Проверяем, что первое значение НЕ ПОТЕРЯЛОСЬ!
WScript.Echo(INI.тратата.вот_это_да);    // ... а второе добавилось!

// вот этот цикл самый интересный можно вытащить и наименование и его значение
for (var prop in INI.тратата)
   WScript.Echo (prop + &quot;=&quot; + INI.тратата[prop]);</code></pre></div><p>Пока в голове возникает аналогия с массивами, но ведь тут, строго говоря, идет работа с объектами</p>]]></description>
			<author><![CDATA[null@example.com (Sphinx70)]]></author>
			<pubDate>Wed, 20 Oct 2010 07:51:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=40610#p40610</guid>
		</item>
	</channel>
</rss>
