Как разделить разделы в файле INI? - PullRequest
10 голосов
/ 04 июня 2011

При сохранении в 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

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

Ответы [ 4 ]

12 голосов
/ 04 июня 2011

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

9 голосов
/ 04 июня 2011

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

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;

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

1 голос
/ 04 июня 2011

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

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

0 голосов
/ 05 августа 2013

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

...