ASP.NET - Cargar un archivo de Texto a un GridView

   
Vista:

Cargar un archivo de Texto a un GridView

Publicado por Leonardo Josué (52 intervenciones) el 15/10/2008 18:59:17
Buenas Tardes, tengo un problema para poder cargar un achivo de texto a un gridView y espero que alguno de ustedes me pueda ayudar. Primero explico el escenario en el que me encuentro:

Actualmente en la empresa donde trabajo algunas oficinas entregan informes en archivos de texto. Algunos archivos vienen separados por comas, pero algunos otros están separados por Pipeline's (|). En estos momentos estoy desarollando una aplicación en ASP.NET con C# para visualizar estos archivos de texto dentro de un GridView. La estructura de los archivos de texto es más o menos como sigue:

Ejemplo archivo separado por comas (c:/ReportesSemanales/ReporteComas.txt)
2008,1897,1,10,99,4,3,223,419035
2008,1898,1,10,99,4,3,223,420768
2008,1899,1,10,99,4,3,223,420244
2008,1900,1,10,99,4,3,223,419871
2008,1901,1,10,99,4,3,223,419868
2008,1902,1,10,99,4,3,223,420094
2008,1903,1,10,99,4,3,223,419039

Ejemplo archivo separado por Pipeline's (c:/ReportesSemanales/ReportePipe.txt)

2008|1897|1|10|99|4|3|223|419035
2008|1898|1|10|99|4|3|223|420768
2008|1899|1|10|99|4|3|223|420244
2008|1900|1|10|99|4|3|223|419871
2008|1901|1|10|99|4|3|223|419868
2008|1902|1|10|99|4|3|223|420094
2008|1903|1|10|99|4|3|223|419039

Ahora bien, para Leer el archivo De texto, lo hago mediante OLEDB, a grandes rasgos esto es lo que hago:

#region Obtiene la Cadena De Conexión
connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='text;HDR={1};FMT={2}'", "c:/ReportesSemanales", "NO", "Delimited");
SelectSQL ="SELECT * FROM " + ReporteComas.txt; //-> Para Pipelines cambiar
try
{
conn = new OleDbConnection(@connectionString);
conn.Open(); // Abrimos la conexión al archivo
OleDbCommand dbCommand = new OleDbCommand(SelectSQL.ToString(), conn);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(dbCommand);
//Crear una nueva Tabla
DataTable dTable = new DataTable();
dataAdapter.Fill(dTable);
//Asignar la tabla al GridView
GVArchivo.DataSource = dTable;
GVArchivo.DataBind();
// Eliminar los objetos y cerrar las conexiones.
dTable.Dispose();
dataAdapter.Dispose();
dbCommand.Dispose();
conn.Close();
conn.Dispose();
}
catch (Exception ex)
{
Temporal = new StringBuilder();
Temporal.Append("A ocurrido una excepción: \n ").Append(@ex.ToString());
}

Cuando estoy leyendo el archivo separado por comas, no tengo ningún problema, sin embargo, cuando trato de leer el archivo separado por pipelines se carga la información en una sola columna del GridView, cuando lo que yo deseo es que separa cada valor en una columna diferente.

Mi pregunta es ¿Cómo puedo especificarle a mi string de conexión qué caracter debe utilizar como delimitador?

Saludos y espero que me puedan ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Cargar un archivo de Texto a un GridView

Publicado por TinchoZ (1 intervención) el 16/10/2008 14:06:57
Nose si se puede... yo probaría tratar el archivo.. e ir insertando fila por fila en un DataTable. No parece complicado, ni grande.. y Encima son solo numeros las columnas? Armate un modulito que lo trate y fue.. no es complicado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Utilizar Schema.ini

Publicado por Leonardo Josué (52 intervenciones) el 16/10/2008 15:47:58
Muchas gracias por el comentario Tinchoz.

El problema es que los archivos que manejo si son bastante grandes (coloqué sólo una pequeña parte de la estructura como ejemplo)... y hacer la inserción fila por fila y columna por columna se vuelve bastante complejo.

De hecho encontré en otro foro algo que me puede ayudar:

http://www.aurigma.com/Support/DocViewer/5/AddingDatafromTextFile.htm.aspx

Aquí lo que se necesita hacer es crear un archivo Schema.ini en el mismo directorio donde se encuentra mi archivo de texto, Cito el párrafo de ejemplo:

----------------------------------------------
Custom Delimited Text Files
If comma or tab delimiters cannot be used for any of reasons, we can specify our own delimiter character. Assume, that we want to separate data in file via pipe character (i.e. '|'). The data file will be looking something like that:

CustomDelimited.txt

Series|Category1|Category2|Category3
Series1|40|50|60
Series2|70|80|43
Series3|89|67|23

Here is a schema.ini file which specifies the necessary symbol as delimiter:

schema.ini

[CustomDelimited.txt]
Format=Delimited(|)
-------------------------------------------

Haciendo esto entonces el código que puse de ejemplo sirve perfectamente. El problema que tengo ahora para poder usar este método es que el nombre de mi archivo puede cambiar, es decir no es siempre el mismo y por lo que pude entender los archivos Schema.ini son estáticos.

Alguien más tiene alguna otra idea de cómo puedo especificarle el delimitador que quiero utilizar para cada archivo de Texto???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Utilizar Schema.ini

Publicado por Elías Jacob (1 intervención) el 23/04/2009 20:20:38
upss, yo tuve el mismo problema y lo resolvi generando el schema.ini en tiempo de ejecución. Lo único que cambiaba era el nombre del archivo de texto en la cabecera del ini. Algo así como:

Private Sub createIniFile(Path As String, FileName As String)
Dim fs As Object
Dim a As Object

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile(Path + "schema.ini", True)
a.WriteLine ("[" + FileName + "]")
a.WriteLine ("ColNameHeader=True")
a.WriteLine ("CharacterSet=1252")
a.WriteLine ("Format=Delimited(|)")
a.WriteLine ("Col1=REFERENCIA Char Width 255")
....
a.Close

Set a = Nothing
Set fs = Nothing

End Sub

---

El problema es que proceso miles de archivos y preferiría una mejor solución.

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar