google analytics

viernes, 6 de julio de 2012

Leyendo ficheros de texto en c#

Muchas veces nos hemos visto con la necesidad de leer un fichero y procesar la información que este contiene. Para esta tarea utilizo la clase StreamReader.

A continuación vamos a leer un ejemplo .csv a traves del control FileUpload de ASP .NET y procesar sus datos, para esto hacemos lo siguiente:

Importamos la libreria System.IO.
using System.IO;

Y añadimos este código
        
private void ProcesarFichero()
{
            if (this.fuFicheros.HasFile)
            {
                string filename = this.fuFicheros.PostedFile.FileName;

                if (filename.Substring(filename.LastIndexOf('.')).Trim().ToUpper() == ".CSV")
                {
                    string line;
                    StringBuilder log = new StringBuilder();
                    Stream stream = this.fuFicheros.FileContent;
                   
                    using (StreamReader sr = new StreamReader(stream))
                    {
                        while (!string.IsNullOrEmpty(line = sr.ReadLine()))
                        {
                            log.AppendLine(line);
                        }
                    }
                }
            }
        }

Donde fuFicheros es el nombre del control FileUpload. Lo primero que hacemos es verificar si este control contiene un fichero seleccionado, luego obtenemos el nombre del archivo y verificamos que tenga la extensión del archivo sea la adecuada (en nuestro ejemplo queremos que sea un archivo .csv).  Finalmente hacemos uso del StreamReader y lo recorremos mediante un while hasta que no tengamos una línea más que leer. En mi caso almacené cada línea del fichero en un StringBuilder.

Nota: Esto de verificar la extensión del archivo también se puede hacer de la siguiente manera: 
if (this.fuFicheros.PostedFile.ContentType == "application/vnd.ms-excel")
{
//
}

En este caso para los archivos .csv el contentType es el que se muestra arriba, pero me di cuenta que al tener abierto ese archivo (desde excel por ejemplo) cambiaba el contentType por lo cual decidí verificar la extensión del archivo como mostré mucho más arriba (si tienen alguna otra mejor manera de hacerlo sería genial que me lo indiquen).


Espero les sirva de ayuda =)


1 comentario: