Importar en VFP archivo CSV formato UTF-8


Hay veces que nos puede llegar un archivo formato CSV generado en c# o similar, en el que no han tenido en cuenta que el carácter usado de separador no debe formar parte de los campos del fichero. Esta entrada muestra una forma de ir limpiando aquellos carácteres que no nos han gustado.

Los problemas encontrados en la conversión se producen por tener en los campos en algún momento algo inesperado y que no le gusta a VFP. Antes de grabar al fichero de texto, se convierten las cadenas que no nos interesen por algo que sepamos que no va a dar problemas.

En el ejemplo de programa, los campos están separados por un punto y coma. El formato del archivo recibido es UTF-8 y lo que hacemos en primer lugar es convertir el archivo a formato double-byte, con la instrucción STRCONV(FILETOSTR(lcFichero ),11) . Para ello se carga en memoria el fichero, se transforma el contenido y se vuelve a grabar. Esto arreglaría los acentos y carácteres tipo “ñ” que de otra forma estarían mal.

El error más recurrente es usar punto y coma dentro del campo. Esto puede ser habitual si la fuente de los datos utilizó entidades HTML de codificación de carácteres, tipo &

La lista de entidades de carácteres se puede consultar en el siguiente link:

http://www.madore.org/~david/computers/unicode/htmlent.html

Yo sólo he usado los que me he encontrado más habitualmente, para evitar ralentizar en exceso el proceso.

También puede ser que el campo tenga comillas ” dentro del campo. Foxpro usa las comillas para separar campos, por eso puede dar problemas. En el ejemplo las cambio por otro carácter.

Cuando se han cambiado todos los carácteres, se crea un cusor y se importa el archivo de texto csv.

Ejemplo

lcFicheroOrigen = FULLPATH(CURDIR())+”origen.csv”
lcFicheroDBCS= FULLPATH(CURDIR())+”resultado.csv”

STRTOFILE(DepurarCaracteresPredefinidos( STRCONV(FILETOSTR(lcFicheroOrigen),11) ), lcFicheroDBCS)

CREATE CURSOR tmpImportar  (campo1 c(10), campo2 c(10), campo3 c(10))
APPEND FROM (lcFicheroDBCS) DELIMITED WITH CHARACTER “;”

FUNCTION DepurarCaracteresPredefinidos
LPARAMETERS lcVariable

lcVariable = STRTRAN(lcVariable,'”‘,”‘”)
lcVariable = STRTRAN(lcVariable,”&quote;”,”‘”)
lcVariable = STRTRAN(lcVariable,”"”,”‘”)
lcVariable = STRTRAN(lcVariable,”'”,”‘”)
lcVariable = STRTRAN(lcVariable,” amp;”,” &”)
lcVariable = STRTRAN(lcVariable,” andamp;”,” &”)
lcVariable = STRTRAN(lcVariable,”‘”,”‘”)
lcVariable = STRTRAN(lcVariable,”�”,””)
lcVariable = STRTRAN(lcVariable,”’”,”‘”)
lcVariable = STRTRAN(lcVariable,”&”,”&”)

RETURN lcVariable

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s