Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/10/2010, 15:39
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: leer archivo csv, transformar datos y crear un nuevo csv

Hola:
En primer lugar, si hay campos que pueden no existir, debes comprobar antes el valor máximo del array, por ejemplo y volviendo al ejemplo anterior:

Juan;12/04/2010;Madrid;1025.33
Jose;15/06/1980;Malaga

En este caso el 2º registro no tendra Dato(3) y para evitar el error podrias hacer algo así:

Dato = Split(RegistroCompleto, ";")
...
...
If Ubound(Dato) => 3 Then
Importe = CCur(Dato(3))
' Si aqui es donde te produce el error el que tenga el punto decimal
' tal vez sea conveniente que utilices
Importe = Val(Dato(3))
Else
Importe = 0
End If

El problema en el tema de la conversión a numeros es que si tienes la certeza de que la cifra contiene el . (punto) decimal es mejor que utilices val, pero si el separador decimal que contiene coincide con el separador de la configuración regional, en España la , (coma) entondes si que puedes utilizar CCur, CDbl o CSng

Este punto te conviene experimentarlo para saber cual te da buen resultado, dependiendo de las circunstancias en que va a utilizarse tu programa.

En cuanto al On Error Resume Next, realmente debería funcionarte pero ten en cuenta que si hay casos en que puedas o no tener valores, tal vez lo mejor es que después de grabar los valores y antes de reasignarlos con el registro nuevo leido, deberias inicializarlos. Me explico, volviendo al ejemplo de arriba y suponiendo que tienes activado el On Error Resume Next, al grabar el segundo registro la variable Importe debería contener el mismo valor que en el primero ya que al producirse el error, no se efectua la asignación.

Despues de procesar el 1º el campo importe es 1025,33 y seguimos con el segundo

Importe = CCur(Dato(3))

Como se produce el error no se reasigna Importe por lo tanto su valor se mantiene.

Dices por otra parte que hay veces que tienes datos en 7 lo impòrtante es que la estructura debe mantenerse o de lo contrario debes tomar las medidas adecuadas, por ejemplo:

Juan;12/04/2010;Madrid;1025.33;15
Jose;15/06/1980;Malaga;;16

En este caso en el segundo registro no existe Dato(3) pero si existe el espacio que ocuparia por lo que Dato(4) tendrá siempre el valor correspondiente.

Espero haberme explicado debidamente.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...