Сортировка и группировка по первому столбцу И сумма каждого значения второго и третьего столбца - C#
Формулировка задачи:
Здравствуйте, нужна помощь в реализации. Есть файл формата:
задача получить новый файл формата:
т.е. сортировка и группировка по первому столбцу И сумма каждого значения второго и третьего столбца
в файле может быть от 1 до 10000 строк
231,9;3;1 231,9;0;1 232,1;1;0 232,0;1;6 232,1;5;0 232,1;3;5 232,1;2;1 232,2;0;6 232,2;1;5
231,9;3;2 232;1;6 232,1;11;6 232,2;1;11
Решение задачи: «Сортировка и группировка по первому столбцу И сумма каждого значения второго и третьего столбца»
textual
Листинг программы
class Program { private const string In = @"d:\in.txt"; private const string Out = @"d:\out.txt"; static void Main() { if (!File.Exists(In)) { Console.WriteLine("Не найден входной файл"); return; } var all = File.ReadAllLines(In); if (!all.Any()) { Console.WriteLine("Пустой файл"); return; } var list = new List<DataIn>(); foreach (var split in all.Select(s => s.Split(';'))) { if (split.Count() < 3) { Console.WriteLine("Неверный формат"); continue; } double numb; int first; int second; if (!double.TryParse(split[0], out numb)) { Console.WriteLine("Неверный первый аргумент"); continue; } if (!int.TryParse(split[1], out first)) { Console.WriteLine("Неверный второй аргумент"); continue; } if (!int.TryParse(split[2], out second)) { Console.WriteLine("Неверный третий аргумент"); continue; } list.Add(new DataIn { Number = numb, FirstCol = first, SecondCol = second }); } var listOut = (from grp in list.GroupBy(x => x.Number).OrderBy(x => x.Key) let sumFirst = list.Where(x => x.Number.Equals(grp.First().Number)).Sum(x => x.FirstCol) let sumSecond = list.Where(x => x.Number.Equals(grp.First().Number)).Sum(x => x.SecondCol) select string.Format("{0};{1};{2}", grp.First().Number, sumFirst, sumSecond)).ToList(); Console.WriteLine("Выход:"); foreach (var outItem in listOut) { Console.WriteLine(outItem); } Console.WriteLine("Запишем в файл"); try { using (var file = new StreamWriter(Out)) { foreach (var line in listOut) file.WriteLine(line); } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.ResetColor(); throw; } } } class DataIn { public double Number { get; set; } public int FirstCol { get; set; } public int SecondCol { get; set; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д