读取没有值的 ini 部分并将其附加到字典中
Read ini sections with no values and append it to a dictionary
我有以下包含部分和键但未分配值的 ini 文件:
[core]
bul_gravel_heli
ent_dst_concrete_large
bul_wood_splinter
[cut_armenian1]
cs_arm2_muz_smg
cs_ped_foot_dusty
我想做的是:
阅读所有章节和值。
将它们以以下格式存储在字典中:
{section: {key1, key2, key3, key4, etc}
现在的问题是我在任何地方都找不到读取没有值的ini文件的例子,我找到的所有结果都是读取没有节的ini文件。
简要说明我想用存储的字典做什么:
- 有一个函数
public void AddList(string listName, List<dynamic> list)
,我想为每个字典键和值创建该方法。我已经知道我可以使用 for 循环,但我一直在解析 ini 文件。
嗯,一个简单的 foreach
循环应该可以:
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]
我有以下包含部分和键但未分配值的 ini 文件:
[core]
bul_gravel_heli
ent_dst_concrete_large
bul_wood_splinter
[cut_armenian1]
cs_arm2_muz_smg
cs_ped_foot_dusty
我想做的是:
阅读所有章节和值。
将它们以以下格式存储在字典中:
{section: {key1, key2, key3, key4, etc}
现在的问题是我在任何地方都找不到读取没有值的ini文件的例子,我找到的所有结果都是读取没有节的ini文件。
简要说明我想用存储的字典做什么:
- 有一个函数
public void AddList(string listName, List<dynamic> list)
,我想为每个字典键和值创建该方法。我已经知道我可以使用 for 循环,但我一直在解析 ini 文件。
- 有一个函数
嗯,一个简单的 foreach
循环应该可以:
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]