<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: чтение INI файлов]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=3962</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=3962&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: чтение INI файлов».]]></description>
		<lastBuildDate>Sat, 11 Feb 2012 13:51:24 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: чтение INI файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=56683#p56683</link>
			<description><![CDATA[<p>Добавлю, парную опубликованной выше, процедуру сохранения пользовательского объекта INI в файл: </p><div class="codebox"><pre><code>// Сохранение объекта INI в ini-файл
function SaveINI(){
	function WriteArray(arr){
		for (var i in arr){
			var value = arr[i];
			if (typeof(value)==&#039;object&#039;) {
				if (value) {
					file.Write(&#039;[&#039; + i + &#039;]\r\n&#039;);
					WriteArray(value);
				}
			}else{
				if (value) {
					file.Write(i + &#039;=&#039; + value + &#039;\r\n&#039;);
				}
			}
		}
	}
	var FSO = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
	var file = FSO.OpenTextFile(ini_file, 2, true);
	WriteArray(INI);
	file.Close();
}</code></pre></div><p>Пользоваться с осторожностью, т.к. ini-файл переписывается полностью. В сохраненном файле параметры с пустыми значениями и любые комментарии будут отсутствовать!</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sat, 11 Feb 2012 13:51:24 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=56683#p56683</guid>
		</item>
		<item>
			<title><![CDATA[JScript: чтение INI файлов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=31342#p31342</link>
			<description><![CDATA[<div class="codebox"><pre><code>var INI = {}; // В этом объекте будут хранится все параметры ini файла
// Функция для загрузки всех параметров ini файла в наш объект
function ReadINIFile(ini_file) {
    var FSO = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
    if ((FSO.FileExists(ini_file)) &amp;&amp; (FSO.GetFile(ini_file).Size &gt; 0)) {
        with (FSO.OpenTextFile(ini_file)) {
            var text = ReadAll();
            Close();
            var arr_lines = text.split(&#039;\n&#039;);
            var section, param, value;
            for (var i in arr_lines){
                if (/^\[(\w+)\]/.test(arr_lines[i])){
                    section = RegExp.$1;
                    INI[section] = {};
                }
                if (/^([^;#][^=]*?)\s*=\s*([^\r\n]*?)\s*$/.test(arr_lines[i])){
                    param = RegExp.$1;
                    value = RegExp.$2;
                    INI[section][param] = value;
                }
            }
        }
    }
}

// ==================================================================
// ПРИМЕР ИСПОЛЬЗОВАНИЯ:
// Читаем ini файл
ReadINIFile(&#039;c:\\Total Commander\\wincmd.ini&#039;);

// Выводим значение одного из параметров
WScript.Echo(INI.Configuration.Editor);

// Выводим все параметры из секции [Lister]
for (var prop in INI.Lister){
    WScript.Echo (prop + &quot;=&quot; + INI.Lister[prop]);
}

RegExp</code></pre></div><p>Поскольку перечитывать каждый раз ini-файл заново - нерационально, процедура грузит за раз ВСЕ параметры в объект INI.<br />Если у нас есть сомнения в существовании того или иного параметра, то надо извлекать его либо перебором:<br /></p><div class="codebox"><pre><code>for (var prop in INI.Configuration) {
 if (prop==&quot;Editor&quot;) WScript.Echo (INI.Configuration[prop]);
}</code></pre></div><p>либо просто проверять существование соответствующего объекта:<br /></p><div class="codebox"><pre><code>if (INI.Configuration.Editor) WScript.Echo(INI.Configuration.Editor);</code></pre></div><p>Вывод имён всех секций INI файла:<br /></p><div class="codebox"><pre><code>// Выводит имена всех секций INI файла
for (var section in INI){
    WScript.Echo (section);
}</code></pre></div><p>Автор примеров — <strong>mozers</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 08 Dec 2009 19:15:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=31342#p31342</guid>
		</item>
	</channel>
</rss>
