Usuario
Dividir un archivo .txt en tantas partes como se cumpla la condición

Pregunta
-
Buen día, tengo el siguiente inconveniente; un archivo de texto con varios bloques de información como se muestran abajo y mi intención es dividir este archivo en tantas partes como se cumpla la condición así;
"archivo.txt"
ENCABEZADO
linea 1
linea 2
linea 3
FINAL
ENCABEZADO
linea 4
linea 5
linea 6
FINAL
lo que intento es que cada vez que encuentre el encabezado y hasta que encuentra otra palabra que indica el final cree un archivo y a si sucesivamente, es decir esperaría al final tener algo como "archivo_1.txt" y "archivo_2.txt"
De antemano agradezco los comentarios que me puedan ayudar a resolver esta situación.
- Tipo cambiado Alberto PoblacionMVP, Moderator jueves, 31 de enero de 2019 11:30 Es una pregunta, no un debate
Todas las respuestas
-
Lo ideal seria leerlo linea por line con un bucle, e ir grabando cada linea en el archivo de salida. Por cada linea, se compara si es el encabezado, y en ese caso se cambia de archivo de salida.
Si el archivo no es muy grande, se puede hacer con un simple "split", suponiendo que el encabezado sea siempre el mismo:
string encabezado = "ENCABEZADO\r\n"; // Ojo, tiene que coincidir EXACTAMENTE con lo que hay en el fichero, incluyendo los saltos de linea string contenido = System.IO.File.ReadAllText(ficheroOrigen); string[] partes = contenido.Split(new string[]{encabezado}, StringSplitOptions.RemoveEmptyEntries); for (int i=0; i<partes.Length; i++) { System.IO.File.WriteAllText(archivoDestino+i, encabezado+partes[i]); }
- Editado Alberto PoblacionMVP, Moderator jueves, 31 de enero de 2019 11:38
-
Tendrás que leer el archivo de texto e ir recorriendo las líneas para crear los archivos de cada bloque:
StreamWriter sw;
int NumeroDeArchivo=1;StreamReader objReader = new StreamReader("c:\\prueba.txt"); string sLine="";
ArrayList arrText = new ArrayList(); while (sLine != null) { sLine = objReader.ReadLine(); if (sLine != null)
{
if (sLine.Trim() = "ENCABEZADO")
{
sw = new StreamWriter("C:\\archivo_" + NumeroDeArchivo +".txt"); // Abro nuevo fichero
}
else
{
if (sLine.Trim() = "FINAL")
{
sw.Close(); // Cierro el fichero en el que estaba escribiendo
NumeroDeArchivo++; // Incremento el siguiente nº de archivo
}
else
{
sw.WriteLine(sLine); // Escribo una linea en el fichero
}}
} objReader.Close();
Saludos, Javier J
- Marcado como respuesta Pedro AlfaroModerator viernes, 1 de febrero de 2019 20:18
- Desmarcado como respuesta Pedro AlfaroModerator viernes, 1 de febrero de 2019 20:18
- Propuesto como respuesta Pedro AlfaroModerator viernes, 1 de febrero de 2019 20:18