Foros del Web » Programación para mayores de 30 ;) » .NET »

Concatenación de Archivos de Texto

Estas en el tema de Concatenación de Archivos de Texto en el foro de .NET en Foros del Web. Buenos días: Tengo el siguiente problema y me gustaría que me pudieran ayudar, actualmente estoy desarrollando una aplicación para el tratamiento de archivos de texto ...
  #1 (permalink)  
Antiguo 19/09/2008, 10:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Concatenación de Archivos de Texto

Buenos días:

Tengo el siguiente problema y me gustaría que me pudieran ayudar, actualmente estoy desarrollando una aplicación para el tratamiento de archivos de texto en ASP.NET con C#. El usuario va a depositar un archivo de texto en una carpeta de mi servidor y yo tengo que analizar ese achivo de texto para poder cargarlo en una base de datos. Cada archivo de texto que proceso contiene alrededor de 10000 registros.

Hasta aquí no hay problema, pero ahora tengo la siguiente complicación. Uno de mis usuarios tiene toda su información separada en diversos archivos (en ocasiones el número de archivos ha llegado hasta 80). estos archivos generalmente no tienen más de 200 registros, pero resulta muy tardado hacer la carga de uno por uno.

Lo que necesito es desarrollar una herramienta que me permita concatenar estos 80 archivos pequeños en un archivo de texto completo, para así solamente hacer la carga de un archivo. ¿Alguien tiene un idea de como puedo hacer esto?
  #2 (permalink)  
Antiguo 19/09/2008, 10:48
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 7 meses
Puntos: 87
Respuesta: Concatenación de Archivos de Texto

Código:
static void Concatena(string Directorio, string ArchivoFinal)
{
string[] inputFiles = Directory.GetFiles(Directorio);
int bufSize = 1024 * 64;
byte[] buf = new byte[bufSize];
using (FileStream outFile = new FileStream(OutputFileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, bufSize))
{
   foreach (string inputFile in inputFiles)
   { 
      using (FileStream inFile = new FileStream(inputFile, FileMode.Open, FileAccess.Read,FileShare.Read, bufSize))
     {
          int br = 0;
          while((br = inFile.Read(buf,0,buf.Length))>0)
          {
              outFile.Write(buf,0,br);
          }
      }
    }
}
Puedes hacer algo como eso , considerando q tengas todos los archivos en una misma carpeta y listo.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 19/09/2008, 12:37
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Concatenación de Archivos de Texto

Muchas Gracias por contestar Peter, voy a implementar el código que mencionas.

Saludos y gracias de nuevo.
Leo
  #4 (permalink)  
Antiguo 19/09/2008, 14:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Concatenación de Archivos de Texto

Hola de Nuevo, este mensaje es para Peterpay y para los que estén interesados en el código:

Traté de ejecutar el procedimiento que venía incluido, pero este tenía varios errores (desde algunas llaves que faltaban cerra hasta algunos elementos que no estaban declarados), pero de cualquier manera me sirvió como guía para poder realizar mi propio código. La concideración es la misma: Todos los elementos que se quieren concatenar deberán estar en el mismo directorio. El código resultante es el siguiente:
Código:
//Directorio Contiene la ruta física donde se encuentran todos los archivos
//Archivo Final es el nombre del archivo (incluyendo la ruta) que tiene la
//concatenación de todos los archivos
static void Concatena(string Directorio, string ArchivoFinal)
    {
        //Crea un arreglo con el nombre de todos los archivos existentes
        string[] ArchivosEntrada = Directory.GetFiles(Directorio);
        //Creamos el archivo Final
        FileStream Archivo = new FileStream(ArchivoFinal, FileMode.Create, 
FileAccess.Write, FileShare.None);
        //Para indicar que se va a escribir en el archivo
        StreamWriter writer = new StreamWriter(Archivo);
        foreach (string ArchivoEntrada in ArchivosEntrada)
        {
                //Cargamos el archivo correspondiente
            FileStream ArchivoConcatenar = new FileStream(ArchivoEntrada, 
FileMode.Open, FileAccess.Read);
                //Especificamos que se va a leer el archivo (nota, si no se le pone la 
//instrucción System.Text.Encoding.GetEncoding(1252) los acentos no son leidos)
            StreamReader reader = new StreamReader(ArchivoConcatenar, System.Text.Encoding.GetEncoding(1252));
            string Linea;
            //Recorremos el archivo linea a linea y la vamos escribiendo en el archivo 
//final
            while ((Linea = reader.ReadLine()) != null)
            {
                writer.WriteLine(Linea);
            }
            //Cerramos el archivo y continuamos con el siguiente                
            reader.Close();

        }
        //Cerramos el archivo Final
        writer.Close();
    }
NOTA: Para que el código funcione tal cual se tienen que agregar las siguientes referencias al inicio del código:
Código:
using System.IO;
using System.Text;
Este código ya lo probé en Visual Studio 2005 y me funcionó correctamente.

Saludos y buena suerte
Leonardo Josué










Cita:
Iniciado por Peterpay Ver Mensaje
Código:
static void Concatena(string Directorio, string ArchivoFinal)
{
string[] inputFiles = Directory.GetFiles(Directorio);
int bufSize = 1024 * 64;
byte[] buf = new byte[bufSize];
using (FileStream outFile = new FileStream(OutputFileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, bufSize))
{
   foreach (string inputFile in inputFiles)
   { 
      using (FileStream inFile = new FileStream(inputFile, FileMode.Open, FileAccess.Read,FileShare.Read, bufSize))
     {
          int br = 0;
          while((br = inFile.Read(buf,0,buf.Length))>0)
          {
              outFile.Write(buf,0,br);
          }
      }
    }
}
Puedes hacer algo como eso , considerando q tengas todos los archivos en una misma carpeta y listo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.