17/10/2010, 15:39
|
| | | Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años 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 ... |