Realización de un subtotal en datos filtrados de un streamreader

Editar como la pregunta no tiene respuesta

Tengo una salida filtrada basada en 1 criterio (los primeros 3 números son 110,210 o 310, para dar 3 grupos distintos) a la consola de streamreader. Pregunta editada porque la primera respuesta fue una solución literal al ejemplo específico que di, las cadenas reales que estoy usando tienen una longitud de 450 caracteres ASCII. He ajustado las cadenas de ejemplo para remediar esto, cualquier cosa que funcione en los datos de muestra funcionará en lo que tengo.

así que lo que realmente necesito es algo que pueda, dependiendo de los primeros 3 números, tomar las 3 letras de una ubicación conocida predesignada (para 210's será el espacio del personaje 14-16 y luego usarlo como subcategoría, resumir todas las entradas en la ranura de caracteres 33-37, y la salida de esos).

cuerdas de ejemplo:

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

Al final de esto, mi salida sería:

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

ABC, AAA, etc. están siempre en la misma ubicación para el mismo número inicial, pero serán diferentes por número inicial.

Del mismo modo, la ubicación de los importes que se están resumiendo también se encuentra en el mismo lugar por cada número inicial.

He intentado agregar algunos string.split al código existente (abajo) pero no he tenido suerte.

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta