Lectura de datos del archivo de texto según el número de columna en cada fila del archivo de texto
Frecuentes
Visto 699 equipos
0
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.
1 Respuestas
2
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# xml file filestream streamreader or haz tu propia pregunta.
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