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