Wykonywanie sumy częściowej na filtrowanych danych z czytnika strumieniowego

edytuj jako pytanie bez odpowiedzi

Mam filtrowane wyjście oparte na 1 kryterium (pierwsze 3 cyfry to 110,210 lub 310, aby dać 3 odrębne grupy) do konsoli od streamreadera. Pytanie edytowane, ponieważ pierwsza odpowiedź była dosłownym rozwiązaniem konkretnego przykładu, który podałem, rzeczywiste ciągi, których używam, mają długość 450 znaków ASCII. Dostosowałem przykładowe łańcuchy, aby temu zaradzić, wszystko, co działa na przykładowych danych, będzie działać na tym, co mam.

więc to, czego naprawdę potrzebuję, to coś, co może, w zależności od pierwszych 3 liczb, pobrać 3 litery ze wstępnie określonej znanej lokalizacji (dla 210 cyfr będzie to szczelina znakowa 14-16, a następnie użycie jej jako podkategorii, zsumowanie wszystkich wpisów) w gnieździe znaków 33-37 i wyślij je).

przykładowe łańcuchy:

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

Na koniec moje wyniki będą następujące:

210 AAA 11111
210 ABC 55555
310 ABC 66666
310 AAA 11111
410 ABC 77777
410 AAA 22222

ABC, AAA itp. Są zawsze w tym samym miejscu dla tego samego numeru startowego, ale będą różne dla każdego numeru startowego.

Podobnie, suma sumowanych sum znajduje się tylko w tym samym miejscu na każdy numer startowy.

Próbowałem dodać trochę string.split do istniejącego kodu (poniżej), ale nie miałem szczęścia.

// 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.
    }
}

questionAnswers(2)

yourAnswerToTheQuestion