Lectura de datos del archivo de texto según el número de columna en cada fila del archivo de texto

Obtengo un archivo de texto del cliente que tiene varias filas y cada fila puede pertenecer a un grupo. Cada grupo tendrá un formato de datos específico. Cada formato de datos define qué campo estará presente en posiciones específicas en una fila. Necesito reformatear los datos y agregar detalles a cada línea.

Por ejemplo, hay 3 grupos. GroupA, GroupB, GroupC y para cada formato de grupo se especifica mediante números de línea.

sabré de antemano GroupA tendrá ID del 1 al 5, luego espacio del 6 al 8 y Fecha del 9 al 15 y Espacio del 16 al 18 e identificador de grupo del 19 (como A/B/C) seguido de espacios y datos específicos del grupo.

Formato de archivo de texto:

1234G   21122013   A   12.34INR   160EUR   -12.90Adj

1254G   21122011   B   12.34Adj   22122011   160EUR   -12.90Adj

1264G   21122012   A   12.34INR   160EUR   -12.90Adj

1274G   20122013   C   FEECredit   12.34INR   -12.90Adj   160EUR   ABCDXYZ   AAA

Entonces, al leer la posición 19 de cada línea, puedo identificar el grupo y luego procesar la línea de acuerdo con la estructura de campo de ese grupo.

¿Cuál es la mejor manera de leer esto? En este momento, estoy pensando en almacenar la información en XML, que tendrá la posición de inicio del campo y la longitud del campo para cada grupo. Al leer cada línea, necesito identificar el grupo y luego elegir el XML correcto y leer el campo como se especifica en XML.

Cualquier ayuda sería apreciada, gracias de antemano.

preguntado el 12 de febrero de 14 a las 07:02

1 Respuestas

Un enfoque no XML que usaría sería leer todas las líneas en un List<string> primero, y luego procese las líneas una por una. Al dividir cada línea en un espacio, tendrá todos los identificadores (A/B/C) en el mismo índice en una matriz. Verifique este identificador y procese el resto de la línea en consecuencia. Aquí hay un breve ejemplo:

private void ProcessLines(List<string> lines)
{
    // lines holds the previously read lines from the textfile
    foreach (string line in lines)
    {
        string[] parts = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        if (parts[2] == "A")
        {
            // code to process a line of code in Group A, etc.
        }
    }
}

Respondido 12 Feb 14, 07:02

Gracias John, esto hubiera sido apropiado si los datos en cada línea fueran menos. Específico para un grupo, hay un mínimo de 10-12 campos en cada línea y solo sé la posición inicial y la longitud de cada campo en la línea. Así que habrá muchas condiciones y codificación. Con XML puede contener información sobre cada grupo, la posición inicial de los campos y la longitud. - Aditya

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.