Чтение раздела файла INI с разделителем в массив

Я пытаюсь преобразовать свой код C++ в Visual C#. Моя цель - иметь возможность читать файл INI (не файл XML!) с некоторыми разделами. Каждая строка назначается кнопке, и каждая кнопка запускает команду. Каждая строка INI содержит 4 значения, разделенных знаком ;.

Например :

[Button_section1]

Button1=Кнопка Сценарий;открыть;блокнот;/a;scenario.txt

Означает :

  • Пункт списка
  • Button1 : настоящее имя кнопки
  • Сценарий кнопки: текст (изображение имени) кнопки
  • open : начальная команда (также можно распечатать или исследовать...
  • блокнот: исполняемый файл (может быть любой файл или CMD для другого примера)
  • /a : первый аргумент
  • сценарий.txt : 2-й аргумент

Итак, в моем предыдущем коде у меня было 25 методов ReadSection и StringSepare, которые могли читать каждый раздел моего INI-файла, а затем помещать его в массив с помощью метода StringSepare.

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

Button bt = (Button)this.Controls.Find(i, true)[0];

Затем нажатие на кнопку позволяет запустить следующую команду: (в данном случае открыть) -> notepad /a script.txt

ПРИМЕЧАНИЯ. Я не хочу использовать XML-файл, потому что у меня есть ссылка на мой SQL BD, который интерпретируется как CSV-файл. По сути это CSV файл с разделами.,..


person Benji55    schedule 26.05.2015    source источник
comment
Возможно, вы захотите взглянуть на Nini, анализатор файлов .Net Ini.   -  person juharr    schedule 26.05.2015


Ответы (2)



Привет, Бенджи, ты можешь использовать мою библиотеку для обработки своих INI-файлов: https://github.com/MarioZ/MadMilkman.Ini

Например:

// Set INI file's format options.
IniOptions option = new IniOptions();
// By default "CommentStarter" is ';' but you are using it as a
// multiple values separator so you need to change "CommentStarter"
option.CommentStarter = IniCommentStarter.Hash;

// Load INI file from path, Stream or TextReader.
IniFile ini = new IniFile(option);
ini.Load("Sample.ini");

// Select file's section.
IniSection sec = ini.Sections["Button_section1"];
// Select section's key.
IniKey key = sec.Keys["Button1"];
// Get key's values.
string[] values = key.Value.Split(';');

Кроме того, к сведению, в библиотеке есть поддержка анализа нескольких значений (int-s, string-s, bool-s и т. д.), но синтаксис отличается, он распознает следующее:

Button1={Сценарий кнопки,открыть,блокнот,/a,scenario.txt}

С приведенным выше синтаксисом вы можете сделать следующее:

// Get key's values.
string[] values;
key.TryParseValue(out values);

Тем не менее, я надеюсь, что это будет полезно для вас, обратите внимание, что вы можете найти дополнительные примеры в примерах проектов (C# и C++/CLI) по следующей ссылке: https://github.com/MarioZ/MadMilkman.Ini/дерево/мастер/MadMilkman.Ini.Samples

person Mario Z    schedule 26.05.2015
comment
Большое спасибо, Марио, я проверю это. - person Benji55; 28.05.2015