Читайте разделы ini без значений и добавляйте их в словарь - PullRequest
0 голосов
/ 16 марта 2020

У меня есть следующий INI-файл с разделами и ключами, но без присвоенных значений:

[core]
bul_gravel_heli
ent_dst_concrete_large
bul_wood_splinter

[cut_armenian1]
cs_arm2_muz_smg
cs_ped_foot_dusty

Я хочу сделать следующее:

  • Читать все разделы и vaues.

  • Сохраните их в словаре в формате:

{section: {key1, key2, key3, key4, etc}

Теперь проблема в том, что Я нигде не могу найти пример чтения ini-файлов без значений, все результаты, которые я нашел, относятся к чтению ini-файлов без разделов.

  • Чтобы дать краткое изложение того, что я хочу сделать с сохраненным словарем это:

    • Есть функция public void AddList(string listName, List<dynamic> list) и для каждого из ключей и значений словаря я хочу создать метод. Я уже знаю, что могу использовать для циклов, но я застрял при разборе INI-файла.

1 Ответ

1 голос
/ 16 марта 2020

Ну, простой foreach l oop должен сделать:

private static Dictionary<string, List<string>> IniToDictionary(IEnumerable<string> lines) {
  Dictionary<string, List<string>> result = 
    new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);

  string category = "";

  foreach (string line in lines) {
    string record = line.Trim();

    if (string.IsNullOrEmpty(record) || record.StartsWith("#"))
      continue;
    else if (record.StartsWith("[") && record.EndsWith("]")) 
      category = record.Substring(1, record.Length - 2);
    else {
      int index = record.IndexOf('=');

      string name = index > 0 ? record.Substring(0, index) : record;

      if (result.TryGetValue(category, out List<string> list))
        list.Add(name);
      else
        result.Add(category, new List<string>() { name});
    }
  }

  return result;
}

Если вы хотите обработать файл:

Dictionary<string, List<string> result = IniToDictionary(File
  .ReadLines(@"c:\MyIniFile.ini"));

Давайте посмотрим (на тесте вход):

Console.Write(tring.Join(Environment.NewLine, result
  .Select(pair => $"{pair.Key,-15} : [{string.Join(", ", pair.Value)}]")));

Результат:

core            : [bul_gravel_heli, ent_dst_concrete_large, bul_wood_splinter]
cut_armenian1   : [cs_arm2_muz_smg, cs_ped_foot_dusty]
...