none
Fusionar Ficheros con SSIS RRS feed

  • Pregunta

  • Buenos días.

    Me gustaría saber si hay alguna forma sencilla de fusionar/concatenar dos ficheros de texto mediante SSIS.

    Los ficheros ya están creados, no debería hacer falta flujo de datos, podría ser con codigo c# (script task) ó de alguna otra forma.

    Gracia.

    jueves, 16 de agosto de 2018 11:36

Respuestas

  • Puede ser un simple "Execute Process task" que ejecute un comando del tipo "CMD /C COPY fichero1+fichero2 ficheroDestino"

    Aunque si prefieres un script task en C# el codigo es relativamente simple de escribir, sobre todo si los ficheros no van a ser demasiado grandes como para cargarlos en memoria (de lo contrario habria que copiarlos por bloques usando un Stream).

    • Propuesto como respuesta Pablo RubioModerator jueves, 16 de agosto de 2018 18:12
    • Marcado como respuesta Hector1978 viernes, 17 de agosto de 2018 6:16
    jueves, 16 de agosto de 2018 11:50
  • Hola Hector1978:

    En C# lo puedes hacer de un modo muy simple

     class Program
        {
            static string ruta = @"c:\logs\temp.log";
            static void Main(string[] args)
            {
                string archivoOrigen1= @"c:\logs\log1.log";
                string archivoOrigen2 = @"c:\logs\log2.log";
    
                StreamReader sw = new StreamReader(@archivoOrigen1);
                string line="";
                    while ((line = sw.ReadLine()) != null)
                    {
                        imprimir (line);
                    }
                StreamReader sw2 = new StreamReader(@archivoOrigen2);
                while ((line = sw2.ReadLine()) != null)
                {
                    imprimir(line);
                }
            }
    
            private static void imprimir(string mensaje)
            {
    
                if (!File.Exists(@ruta))
                {
                    using (StreamWriter sw = File.CreateText(@ruta))
                    {
                        sw.WriteLine("Inicio del archivo de fusión");
                        sw.Close();//si no existe creamos el archivo y añadimos la linea.
                    }
                }
    
                if (File.Exists((@ruta)))
                {// ya existe 
                    using (StreamWriter sw = File.AppendText((@ruta)))
                    {
                        sw.WriteLine(mensaje);
    
                        sw.Close();//añadimos el item seleccionado
                    }
                }
                
            }
        }

    También lo puedes hacer en el mismo método. Etc...

    Espero te ayude.

    Un saludo

    • Propuesto como respuesta Pablo RubioModerator jueves, 16 de agosto de 2018 18:12
    • Marcado como respuesta Hector1978 viernes, 17 de agosto de 2018 6:16
    jueves, 16 de agosto de 2018 11:47

Todas las respuestas

  • Hola Hector1978:

    En C# lo puedes hacer de un modo muy simple

     class Program
        {
            static string ruta = @"c:\logs\temp.log";
            static void Main(string[] args)
            {
                string archivoOrigen1= @"c:\logs\log1.log";
                string archivoOrigen2 = @"c:\logs\log2.log";
    
                StreamReader sw = new StreamReader(@archivoOrigen1);
                string line="";
                    while ((line = sw.ReadLine()) != null)
                    {
                        imprimir (line);
                    }
                StreamReader sw2 = new StreamReader(@archivoOrigen2);
                while ((line = sw2.ReadLine()) != null)
                {
                    imprimir(line);
                }
            }
    
            private static void imprimir(string mensaje)
            {
    
                if (!File.Exists(@ruta))
                {
                    using (StreamWriter sw = File.CreateText(@ruta))
                    {
                        sw.WriteLine("Inicio del archivo de fusión");
                        sw.Close();//si no existe creamos el archivo y añadimos la linea.
                    }
                }
    
                if (File.Exists((@ruta)))
                {// ya existe 
                    using (StreamWriter sw = File.AppendText((@ruta)))
                    {
                        sw.WriteLine(mensaje);
    
                        sw.Close();//añadimos el item seleccionado
                    }
                }
                
            }
        }

    También lo puedes hacer en el mismo método. Etc...

    Espero te ayude.

    Un saludo

    • Propuesto como respuesta Pablo RubioModerator jueves, 16 de agosto de 2018 18:12
    • Marcado como respuesta Hector1978 viernes, 17 de agosto de 2018 6:16
    jueves, 16 de agosto de 2018 11:47
  • Puede ser un simple "Execute Process task" que ejecute un comando del tipo "CMD /C COPY fichero1+fichero2 ficheroDestino"

    Aunque si prefieres un script task en C# el codigo es relativamente simple de escribir, sobre todo si los ficheros no van a ser demasiado grandes como para cargarlos en memoria (de lo contrario habria que copiarlos por bloques usando un Stream).

    • Propuesto como respuesta Pablo RubioModerator jueves, 16 de agosto de 2018 18:12
    • Marcado como respuesta Hector1978 viernes, 17 de agosto de 2018 6:16
    jueves, 16 de agosto de 2018 11:50