1

Тема: JScript: чтение INI файлов

var INI = {}; // В этом объекте будут хранится все параметры ini файла
// Функция для загрузки всех параметров ini файла в наш объект
function ReadINIFile(ini_file) {
    var FSO = new ActiveXObject("Scripting.FileSystemObject");
    if ((FSO.FileExists(ini_file)) && (FSO.GetFile(ini_file).Size > 0)) {
        with (FSO.OpenTextFile(ini_file)) {
            var text = ReadAll();
            Close();
            var arr_lines = text.split('\n');
            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('c:\\Total Commander\\wincmd.ini');

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

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

RegExp

Поскольку перечитывать каждый раз ini-файл заново - нерационально, процедура грузит за раз ВСЕ параметры в объект INI.
Если у нас есть сомнения в существовании того или иного параметра, то надо извлекать его либо перебором:

for (var prop in INI.Configuration) {
 if (prop=="Editor") WScript.Echo (INI.Configuration[prop]);
}

либо просто проверять существование соответствующего объекта:

if (INI.Configuration.Editor) WScript.Echo(INI.Configuration.Editor);

Вывод имён всех секций INI файла:

// Выводит имена всех секций INI файла
for (var section in INI){
    WScript.Echo (section);
}

Автор примеров — mozers.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2 (изменено: mozers, 2012-02-11 18:02:02)

Re: JScript: чтение INI файлов

Добавлю, парную опубликованной выше, процедуру сохранения пользовательского объекта INI в файл:

// Сохранение объекта INI в ini-файл
function SaveINI(){
	function WriteArray(arr){
		for (var i in arr){
			var value = arr[i];
			if (typeof(value)=='object') {
				if (value) {
					file.Write('[' + i + ']\r\n');
					WriteArray(value);
				}
			}else{
				if (value) {
					file.Write(i + '=' + value + '\r\n');
				}
			}
		}
	}
	var FSO = new ActiveXObject("Scripting.FileSystemObject");
	var file = FSO.OpenTextFile(ini_file, 2, true);
	WriteArray(INI);
	file.Close();
}

Пользоваться с осторожностью, т.к. ini-файл переписывается полностью. В сохраненном файле параметры с пустыми значениями и любые комментарии будут отсутствовать!