Como leer un archivo de texto formato *.csv con más de un giga, con valores nulos en visual basic 6.0

Necesito leer un archivo de texto formato *. Csv, con más de un giga, que contiene valores nulos. Al abrir el archivo de texto recorre sin problemas e importa a la base de datos, pero al momento de encontrar un registro nulo "000" queda colgado el programa, sin importar a la base de datos ningún registro, ¿cómo puedo solucionarlo? El código que utilizo es:

nroArchivo = FreeFile()
Open veraux For Binary As #nroArchivo

Do Until EOF(nroArchivo)
DoEvents

Line Input #nroArchivo, lin
dats = Split(lin, ",")
variable = dats(0)
Loop

1 respuesta

Respuesta

Supongo que funcionará igual que con VBA.

Una vez tienes el valor de la línea en la variable lin (Line Input #nroArchivo, lin), puedes poner un IF, ¿no?. Entiendo que es la manera más sencilla de descartar errores.

Otro tema es porque se queda colgado. Posiblemente la respuesta está en la función Splits, a la que le pasas el contenido de la línea.

en la linea Line Input #nroArchivo, lin se me queda colgado, cuando la variable quiero almacenar en lin, cuando la linea tiene campos nulos, se queda colgado. como podria solucionarlo?

desde ya muchas gracias,

saludos,

En principio, a Line Input le da igual lo que capture, se limita únicamente a meterlo en la variable. Quiero decir que no sabe si son campos nulos.

¿Has probado, tras esta línea, a poner un If?

Otra pregunta que se me ocurre: ¿Qué es lo que se lee en el archivo csv, es decir, decías en el enunciado que dice ooo, pero, realmente es eso lo que pone en el csv, o hay algún caracter de control?

Lo digo porque igual tienes un caracter de control que hace que se interrumpa la ejecución.

Si no se detiene ahí, y lo hace al entrar en Splits, mira el código de la función, igual espera recibir un string y no es eso lo que recibe.

No me permite poner un if en la línea line input,

Y tiene campos de comunicaciones separados por comas "," tales como fecha de comunicaciones, numero de teléfonos etc.

En la parte donde comienza los campos nulos que contiene el archivo csv, queda colgado el programa,

Saludos,

Me refería a algo como lo siguiente:

[...]

Line Input #nroArchivo, lin

If lin = "000" then

Else

   dats = Split(lin, ",")

Endif

[...]

que tal experto?

en la linea Line Input #nroArchivo, lin queda colgado el programa, al asignar la variable lin, no me permite hacer nada,

Saludos,

¿Puedes ver el archivo con un editor de texto?

¿Podrías ver qué hay en esa línea?

¿Has podido importar algo anterior a esa linea?

Cuando llega a la línea en cuestión, ¿se detiene, lanza algún error en tiempo de ejecución, algún warning?

Tendré que consultar algún manual de VB6, pero diría que hay algún método de captura de errores, tal como On Error Gosub... igual como está en VBA, o del estilo de Try... Catch como en Visual Studio. Lo miraré a ver si podemos poner algo así para prevenir el error.

Seguimos en contacto.

¿Puedes ver el archivo con un editor de texto?

Puedo visualizar el texto, pero no editar, por el tamaño

¿Podrías ver qué hay en esa línea?

Tiene campos nulos 000000, y ahí queda colgado el programa

¿Has podido importar algo anterior a esa línea?

Si importo los datos anteriores, pero cuando llega al 1er registro nulo, queda colgado

Cuando llega a la línea en cuestión, ¿se detiene, lanza algún error en tiempo de ejecución, algún warning?

No lanza ningún error, solo queda colgado, y el programa se queda sin responder.

Saludos,

Pues me estoy quedando sin recursos...

Tampoco tiene pinta de ser un error de conversión de tipos de datos.

Lo único que se me ocurre es que haya algún código de control al final de la línea que haga que se cuelgue, y eso es más complicado de ver con un bloc de notas o similar. Suele ocurrir cuando lo que ha generado el archivo no ha sido algo en entorno windows. ¿Sabes si es el caso?.

En principio no me suena ninguna otra cosa. Miraré esta noche si tengo por casa algún manual de VB6, no recuerdo donde los puse.

Siento no ser de más ayuda.

que tal experto?

te dejo el vinculo del archivo de texto, para que puedas visualizar.

https://www.dropbox.com/s/p7wpm6q55bn39be/NGNC2_20141201_132304_8870.csv?dl=0 

desde ya muchas gracias

Sí, lo he visto. Digamos que tengo dos noticias, una buena y otra mala.

La buena es que creo que ya se donde está el problema, la mala es que, de momento, no veo como solucionarlo.

He tenido que visualizar el contenido del archivo con una consola de ordenes, imposible hacerlo con un editor de textos, por lo menos no en modo gráfico.

Según he visto, hasta llegar a la línea que da error, todas las líneas tienen una estructura similar: diferentes campos separados por comas. Es un csv, así que no te digo nada nuevo.

Lo que ocurre es que cuando hay una cadena que no es la normal, es decir, cuando aparecen los ceros, aparecen muchos más caracteres de los que te admite un buffer de captura de datos de un archivo. Obviamente no me he parado a mirarlo, pero si el buffer máximo permitido son 255 bytes, la cadena de ceros puede ser de varios kb o más, por lo que, como tú decías, se queda colgado al leer la línea. El tamaño es el número de kb que hay entre el siguiente caracter después de un retorno de línea, y el siguiente retorno de línea.

¿Solución?. Pues no tengo claro si se puede ampliar el tamaño del buffer. Lo primero que se me ocurre es que retoques la instrucción Open.

La sintaxis de VBA es muy similar o casi igual a la de VB, y en la ayuda dice:

Open (Instrucción)

Open rutaacceso [For modo] [Access acceso] [bloquear] As [#]númeroarchivo [Len=longitudregistro]

Entiendo que puedes atacar por poner el último parámetro, para que pueda leer hasta un valor determinado.

Si no funciona, lo único que se me ocurre es que intentes que los orígenes de datos no sean tan grandes, o bien que estén exportados de modo que los valores 000... 00 no existan.

Dada la información que me has pasado, si es lo que parece, hace tiempo me encontré algo similar con una centralita digital que teníamos en la lan, y generaba un archivo diario, de modo que era fácil tratar la información.

De momento no veo nada más.

Seguiré dándole vueltas a ver si encuentro algo.

¿Qué tal experto?

Como podría eliminar los datos nulos, ¿en el archivo de texto? Ahí me ayudaría a importar los datos.

Saludos,

Estoy en ello. No he podido hacer nada en estos días por motivos personales, pero me pongo a ello.

Supongo que será leyendo de poco en poco, por lo menos es lo que voy a intentar yo.

Te digo algo si hay novedades.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas