<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JScript: чтение INI файлов]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=3962&amp;type=atom" />
	<updated>2012-02-11T13:51:24Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=3962</id>
		<entry>
			<title type="html"><![CDATA[Re: JScript: чтение INI файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=56683#p56683" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[mozers]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=4112</uri>
			</author>
			<updated>2012-02-11T13:51:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=56683#p56683</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JScript: чтение INI файлов]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=31342#p31342" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2009-12-08T19:15:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=31342#p31342</id>
		</entry>
</feed>
