none
Dividir un archivo .txt en tantas partes como se cumpla la condición RRS feed

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

     
    miércoles, 30 de enero de 2019 16:38

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]);
    }


    jueves, 31 de enero de 2019 11:35
    Moderador
  • 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

    jueves, 31 de enero de 2019 11:46