.ini

Поделись знанием:
Перейти к: навигация, поиск

ini-файл (англ. Initialization file) — это файл конфигурации, который содержит данные настроек для Microsoft Windows, Windows NT и некоторых приложений.

Появились с самых первых версий Windows. В версии Windows 1.01 это был только файл WIN.INI. В Windows 3.0 добавился файл SYSTEM.INI. А затем их количество начало расти быстро и бесконтрольно.

Не существует подробной официальной спецификации формата. Начиная с Windows 95, INI файлы считаются устаревшими и в качестве замены им Microsoft предлагает использовать системный реестр ([msdn.microsoft.com/library/en-us/sysinfo/base/registry.asp Registry]). Тем не менее INI файлы продолжают использоваться как приложениями других производителей, так и компонентами ОС от Microsoft. Например, файл boot.ini используется в Windows NT4/2000/XP при загрузке для выбора из нескольких ОС.

Хотя INI файлы и приобрели популярность в Windows, они могут использоваться в любой ОС. Несложная структура этого формата позволяет легко обрабатывать их программно и имеет достаточно понятный вид для чтения и изменения человеком. Существуют текстовые редакторы (например, SciTE или Notepad++), которые используют подсветку синтаксиса и фолдинг для этого формата, что облегчает редактирование INI файлов вручную.

Использование секций для разделения параметров способствует систематизации данных, однако для хранения настроек большого объёма с более сложной иерархической структурой лучше подходит формат XML.





Формат файла

ini-файлы — это обычные текстовые файлы, которые можно редактировать и просматривать при помощи любого текстового редактора. ini-файлы имеют следующий формат:

; некоторый комментарий
# комментарий в стиле Unix

[Section1]
; комментарий о разделе
var1=значение_1 ; иногда допускается комментарий к отдельному параметру
var2=значение_2
  
[Section2]
var1=значение_1
var2=значение_2

; иногда позволяется перечислять несколько значений через запятую
[Section3]
var1=значение_1_1, значение_1_2, значение_1_3
var2=значение_2
; в Zend Framework массив задаётся следующим способом
[Section3.1]
var1[]=значение_1_1
var1[]=значение_1_2
var1[]=значение_1_3
var2=значение_2

; Иногда значения отсутствуют 
[Section4.0]
[ViewState]
Mode=
Vid=
FolderType=Generic

INI файл может содержать:

  • пустые строки;
  • комментарии — от символа «;» (точка с запятой) до конца строки;
  • заголовки разделов — строки, состоящие из названия раздела, заключённого в квадратные скобки «[ ]»;
  • значения параметров — строки вида «ключ=значение».

Соглашения

Не существует общепринятого стандарта формата файлов INI. Хотя общая структура таких файлов обычно сохраняется, многие программные продукты вводят в неё дополнительные возможности или, наоборот, ограничения.

  • Комментарии. Некоторые приложения (например, Samba) считают символом начала комментария как «;», так и «#».
  • Обратный слэш. Иногда допускается использование обратного слэша «\» для объявления следующей строки продолжением этой. В таком случае они будут обработаны как одна целая строка. Иногда возможно также применять «\» для ввода спецсимволов, например, '\n' для обозначения переноса строки.
  • Одинаковые параметры. В большинстве случаев наличие двух одинаковых ключей в одной секции запрещено (при этом обрабатывается только последний ключ).
  • Одинаковые имена секций. Обычно при наличии нескольких секций с одинаковыми именами в файле обрабатывается лишь последняя из них. Некоторые приложения объединяют содержимое всех таких секций в одну.

Пример реализации

Рассмотрим код, который обрабатывает заданный корректный ini-файл и выводит его в специальном виде:
int main()
{
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);

	int n;
	cin >> n;
	cin.get();
	map <string, map <string, string>> mp;
	string from = "";
	for (int i = 0; i < n; i++)
	{
		string s;
		getline(cin, s);
		for (size_t j = 0; j < s.size();)
		{
			if (s[j] == ' ')
				s.erase(j, 1);
			else
				j++;
		}
		if (s.size() == 0 || s[0] == ';')
		{
			continue;
		}
		if (s[0] == '[')
		{
			s.erase(0, 1);
			s.erase(s.size() - 1, 1);
			from = s;
			mp[from];
		}
		else
		{
			mp[from][s.substr(0, s.find("="))] = s.substr(s.find("=") + 1, s.size() - s.find("="));
		}
	}

	for (map < string, map <string, string >> :: iterator it = mp.begin(); it != mp.end(); it++)
	{
		if (it -> first != "")
		{
			cout << "[" << it -> first <<"]" <<  endl;
		}
		for (map < string, string >::iterator itt = mp[it -> first].begin(); itt != mp[it -> first].end(); itt++)
		{
			cout << itt -> first << "=" << itt -> second << endl;
		}
	}

	return 0;
}

См. также

Напишите отзыв о статье ".ini"

Ссылки

  • [cloanto.com/specs/ini.html Cloanto Implementation of INI File Format]
  • [www.transl-gunsmoker.ru/2010/05/ini.html Почему INI-файлы устарели и их заменил реестр?]

Отрывок, характеризующий .ini

– Voila un veritable ami! – сказала просиявшая Элен, еще раз дотрогиваясь рукой до рукава Билибипа. – Mais c'est que j'aime l'un et l'autre, je ne voudrais pas leur faire de chagrin. Je donnerais ma vie pour leur bonheur a tous deux, [Вот истинный друг! Но ведь я люблю того и другого и не хотела бы огорчать никого. Для счастия обоих я готова бы пожертвовать жизнию.] – сказала она.
Билибин пожал плечами, выражая, что такому горю даже и он пособить уже не может.
«Une maitresse femme! Voila ce qui s'appelle poser carrement la question. Elle voudrait epouser tous les trois a la fois», [«Молодец женщина! Вот что называется твердо поставить вопрос. Она хотела бы быть женою всех троих в одно и то же время».] – подумал Билибин.
– Но скажите, как муж ваш посмотрит на это дело? – сказал он, вследствие твердости своей репутации не боясь уронить себя таким наивным вопросом. – Согласится ли он?
– Ah! Il m'aime tant! – сказала Элен, которой почему то казалось, что Пьер тоже ее любил. – Il fera tout pour moi. [Ах! он меня так любит! Он на все для меня готов.]
Билибин подобрал кожу, чтобы обозначить готовящийся mot.
– Meme le divorce, [Даже и на развод.] – сказал он.
Элен засмеялась.
В числе людей, которые позволяли себе сомневаться в законности предпринимаемого брака, была мать Элен, княгиня Курагина. Она постоянно мучилась завистью к своей дочери, и теперь, когда предмет зависти был самый близкий сердцу княгини, она не могла примириться с этой мыслью. Она советовалась с русским священником о том, в какой мере возможен развод и вступление в брак при живом муже, и священник сказал ей, что это невозможно, и, к радости ее, указал ей на евангельский текст, в котором (священнику казалось) прямо отвергается возможность вступления в брак от живого мужа.
Вооруженная этими аргументами, казавшимися ей неопровержимыми, княгиня рано утром, чтобы застать ее одну, поехала к своей дочери.
Выслушав возражения своей матери, Элен кротко и насмешливо улыбнулась.
– Да ведь прямо сказано: кто женится на разводной жене… – сказала старая княгиня.
– Ah, maman, ne dites pas de betises. Vous ne comprenez rien. Dans ma position j'ai des devoirs, [Ах, маменька, не говорите глупостей. Вы ничего не понимаете. В моем положении есть обязанности.] – заговорилa Элен, переводя разговор на французский с русского языка, на котором ей всегда казалась какая то неясность в ее деле.
– Но, мой друг…
– Ah, maman, comment est ce que vous ne comprenez pas que le Saint Pere, qui a le droit de donner des dispenses… [Ах, маменька, как вы не понимаете, что святой отец, имеющий власть отпущений…]
В это время дама компаньонка, жившая у Элен, вошла к ней доложить, что его высочество в зале и желает ее видеть.
– Non, dites lui que je ne veux pas le voir, que je suis furieuse contre lui, parce qu'il m'a manque parole. [Нет, скажите ему, что я не хочу его видеть, что я взбешена против него, потому что он мне не сдержал слова.]
– Comtesse a tout peche misericorde, [Графиня, милосердие всякому греху.] – сказал, входя, молодой белокурый человек с длинным лицом и носом.
Старая княгиня почтительно встала и присела. Вошедший молодой человек не обратил на нее внимания. Княгиня кивнула головой дочери и поплыла к двери.
«Нет, она права, – думала старая княгиня, все убеждения которой разрушились пред появлением его высочества. – Она права; но как это мы в нашу невозвратную молодость не знали этого? А это так было просто», – думала, садясь в карету, старая княгиня.

В начале августа дело Элен совершенно определилось, и она написала своему мужу (который ее очень любил, как она думала) письмо, в котором извещала его о своем намерении выйти замуж за NN и о том, что она вступила в единую истинную религию и что она просит его исполнить все те необходимые для развода формальности, о которых передаст ему податель сего письма.
«Sur ce je prie Dieu, mon ami, de vous avoir sous sa sainte et puissante garde. Votre amie Helene».
[«Затем молю бога, да будете вы, мой друг, под святым сильным его покровом. Друг ваш Елена»]
Это письмо было привезено в дом Пьера в то время, как он находился на Бородинском поле.


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