Выполнение промежуточного итога для отфильтрованных данных из потокового ридера

изменить как вопрос без ответа

У меня есть отфильтрованный вывод, основанный на 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.
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос