Заполнение словаря: Ключи заполняются правильно но значения не верные - C#
Формулировка задачи:
Помогите найти ошибку в коде.
Задача такая. Есть текстовый файл в котором содержится список материалов и их характеристика. Характеристика представляет собой список координат точек графика. Файл имеет такую структуру:
№0 Ст20
//start #0
0,0;0,0
0,1;0,6
...
2,2;600
2,3;1000
//end #0
№1 12X17
//start #1
0;0
0,1;1
...
0,95;12,1
1,0;14
//end #1
и так далее.
Я хочу создать словарь типа
у которого
KEY - часть строки после "№0 ", "№1 ", "№2 ", ...
Values - значения между маркерами "//start # " и "//end # " соответсвуещего ключа
реализация у меня такая:
Загружаю файл:
Ну и собственно заполнение словаря
Ключи заполняются правильно но вот значения не верные. Для каждого ключа один и тот же список координат (для последнего материала в текстовом файле).
Подскажите что не так.
Спасибо.
Dictionary<string, List<PointF>> dictionary = new Dictionary<string, List<PointF>>();
FileMaterials_arrey = System.IO.File.ReadAllLines(dir_load + @"\ResourcesFile\DB\materials.txt"); FileMaterials_list.AddRange(FileMaterials_arrey); FuncMaterials(FileMaterials_list, MaterialsDict);
private void FuncMaterials(List<string> list, Dictionary<string,List<PointF>> Dict) { Dictionary<string, List<PointF>> preDict = new Dictionary<string, List<PointF>>(); List<PointF> preListPoint = new List<PointF>(); List<string> preListmaterials = new List<string>(); PointF prePoint = new PointF(); int start=-1, fin=-1; //Ищу все названия материалов foreach (string line in list) { if (line.IndexOf("№") > -1) { preListmaterials.Add(line.Substring(3)); } } // Для каждого названия создаю список с координатами for (int i = 0; i < preListmaterials.Count; i++) { for (int k = 0; k <= list.Count-1; k++) { if (list[k].IndexOf(@"//start #"+Convert.ToString(i)) > -1) { start = k + 1; break; } } for (int k = 0; k <= list.Count-1; k++) { if (list[k].IndexOf(@"//end #" + Convert.ToString(i)) > -1) { fin = k - 1; break; } } preListPoint.Clear(); for (int n = start; n <= fin; n++) { prePoint.X = (float)Convert.ToDouble(list[n].Substring(0, (list[n].IndexOf(";")))); prePoint.Y = (float)Convert.ToDouble(list[n].Substring((list[n].IndexOf(";") + 1))); preListPoint.Add(prePoint); } // Проблема тут (я так считаю) preDict.Add(preListmaterials[i], preListPoint); } Dict = preDict; }
Решение задачи: «Заполнение словаря: Ключи заполняются правильно но значения не верные»
textual
Листинг программы
static void Main(string[] args) { Regex r = new Regex(@"№\d+\s+(?<name>[^\r\n]+) \r?\n.+ ( \r?\n(?<first>[\d,]+);(?<second>[\d,]+) )+", RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled); var d = new Dictionary<string, List<PointF>>(); IEnumerable<Capture> A, B; foreach (Match m in r.Matches(File.ReadAllText("test.txt"))) { A = m.Groups["first"].Captures.Cast<Capture>(); B = m.Groups["second"].Captures.Cast<Capture>(); d.Add( m.Groups["name"].Value, A.Zip(B, (a, b) => new PointF(float.Parse(a.Value), float.Parse(b.Value))).ToList() ); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д