Выполнение промежуточного итога для отфильтрованных данных из потокового ридера
изменить как вопрос без ответа
У меня есть отфильтрованный вывод, основанный на 1 критерии (первые 3 числа - 110 210 или 310, чтобы дать 3 различные группы) для консоли из потокового ридера. Вопрос отредактирован, потому что первый ответ был буквальным решением конкретного примера, который я привел, реальные строки, которые я использую, имеют длину 450 символов ASCII. Я исправил пример строки, чтобы исправить это, все, что работает с образцами данных, будет работать на том, что у меня есть.
так что мне действительно нужно что-то, что может, в зависимости от первых 3 чисел, взять 3 буквы из заранее назначенного известного местоположения (для 210-х это будет слот для символов 14-16, а затем использовать это как подкатегорию, суммировать все записи в слот символов 33-37, и выведите те).
пример строки:
210!!!!123244AAA75AWEHUIHJUAS!!!11111
210???1223455ABC76554HJHSDFQ????22222
210--32455623ABCFFCDGHDSFAS-----33333
310 1232451 2ABC34 GAERsASDFASDG1234523 44444
310 1234a354GDSAASDR 3 AAA GF234523653hfdssdgSDASDF 11111
310 12378HJK1234 ABC HJHJK123462 ASDHDFS FA REW 22222
4101111ASDJF 1ABCASF D1234 ASGF66666
4102222QW12362ER2 ABC 23459876HJKXC 11111
41033333T123 1RWE AAA ASDFHJKRTR WQ 22222
В конце этого мой вывод будет:
210 AAA 11111
210 ABC 55555
310 ABC 66666
310 AAA 11111
410 ABC 77777
410 AAA 22222
ABC, AAA и т. Д. Всегда находятся в одном и том же месте для одного и того же начального номера, но будут отличаться для каждого начального номера.
Точно так же местоположение суммируемых сумм также находится только в одном и том же месте для каждого стартового номера.
Я попытался добавить немного string.split к существующему коду (ниже), но мне не повезло.
// Read in a file line-by-line, and store in a List.
List<string> list = new List<string>();
using (StreamReader reader = new StreamReader("file.dat"))
{
string line;
while ((line = reader.ReadLine()) != null)
{
var beginning = line.Substring(0, 3);
if (beginning != "210" && beginning != "310" && beginning != "410")
continue;
list.Add(line); // Add to list.
Console.WriteLine(line); // Write to console.
}
}