Как я могу отделить разделы в INI файле?

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

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

Пример:

Стандартный Ini

[GENERAL]
value1=0
value2=somestring
[ADVANCED]
type=1
autosave=0
[OTHER]
showatstartup=1

Ини с разделительными линиями

[GENERAL]
value1=0
value2=somestring

[ADVANCED]
type=1
autosave=0

[OTHER]
showatstartup=1

Как это можно сделать?

Ответ 1

Загрузите файл и вставьте пустые строки перед каждым именем раздела. Здесь функция для него:

procedure InsertSectionLineBreaks(const IniFile: TFileName);
var
  f: TStrings;
  i: Integer;
begin
  f := TStringList.Create;
  try
    f.LoadFromFile(IniFile);
    for i := Pred(f.Count) downto 1 do
      if (f[i] <> '') and (f[i][1] = '[') then
        f.Insert(i, '');
    f.SaveToFile(IniFile);
  finally
    f.Free;
  end;
end;

Обратите внимание, что если перед именем раздела уже есть пустая строка, этот код добавит еще один. Цикл переходит к единице вместо нуля, предполагая, что нам не нужно добавлять пустую строку над первым разделом файла.

Ответ 2

Самый простой способ - открыть файл .ini с помощью TMemIniFile вместо TIniFile. Он работает одинаково, но когда он сохраняет (UpdateFile), пробелы автоматически добавляются между разделами.

Ответ 3

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

Обновление: используйте TCustomIniFile в качестве базового класса, если вы хотите использовать этот подход, а не TIniFile.

Ответ 4

Почему бы не использовать простой возврат каретки: Добавить (# 13 # 10);