У меня есть текстовый файл, содержащий:
0,ke-2,0.0986089045676918 0,putar,0.141656526869241 1,film,0.110677581313152 1,aveng,0.12035192077391
Я хочу проанализировать файл txt в словаре со структурой, подобной этой:
private Dictionary<int, Dictionary<string, double>> openNormalization()
{
var temp = new Dictionary<int, Dictionary<string, double>>();
var file = File.ReadLines("normalization.txt").Cast<string>();
foreach (string f in file)
{
var doc = new Dictionary<string, double>();
string fwd = "0";
string[] entry = f.Split(',');
if (entry[0] == fwd)
{
doc.Add(entry[1], Convert.ToDouble(entry[2]));
fwd = entry[0];
}
else
{
temp.Add(int.Parse(fwd), doc);
doc = new Dictionary<string, double>();
doc.Add(entry[1], Convert.ToDouble(entry[2]));
fwd = entry[0];
}
return temp;
}
как я могу это исправить?
запись [2] - 0,0986089045676918, я хочу преобразовать в double, потому что мне нужно добавить в словарь <string, double>
Ваш код работает в культуре, которая по умолчанию использует ,
вместо .
в качестве десятичного разделителя?
Что произойдет, если вы воспользуетесь double d = double.Parse(entry[2], CultureInfo.InvariantCulture);
? Это работает?
мой код работает. для двойного значения
ваш код может работать, но он работает только в ситуации, когда есть только 2 клавиши (0 и 1), если вы добавите ключ 2
, все сломается
Вы можете использовать LINQ
с GroupBy
Смотрите мой код ниже
private Dictionary<int, Dictionary<string, double>> openNormalization()
{
var lines = File.ReadLines("normalization.txt");
return lines
.Select(line => line.Split(','))
.GroupBy(item => Convert.ToInt32(item[0]))
.ToDictionary(groupValues => groupValues.Key, groupValues => groupValues.ToDictionary(item => item[1], item => Convert.ToDouble(item[2])));
}
но у меня от 0 до 80 для ключей
Точно, вам нужно 80 if clauses для 80 ключей.
Каково значение
entry[2]
при возникновении исключения?