PDA

Ver la Versión Completa : [Duda] Caracteres extraños desde archivo csv


Juanes
4 de agosto de 2022, 01:57
Ayuda por favor.

Al generar un archivo csv desde powercobol, los caracteres de tildes y eñes se ven correctamente, pero cuando se suben a una Base de datos, los pasa con caracteres extraños.

Gracias.

JCantero
4 de agosto de 2022, 08:54
Para poder ayudarte debes de decirnos;


En que base de datos estás importando el .csv (oracle, postgresql, access, sqlserver, mysql)
Que tipo de codificación (tabla de código) utilizas para las tablas que deseas importar (UTF, ISO_????, Latin?, WIN???)


Intenta abrir el csv con un editor que no convierta la tabla de códigos o codificación o un editor binario, ya que si lo abres por ejemplo con el notepad de windows te lo convierte a lo configurado en windows. Lo que ves en la pantalla no es realmente lo que tienes en el fichero.

Si lo abres con notepad, ve a "guardar como" y verifica la codificación que tiene ese fichero .csv

JCantero
4 de agosto de 2022, 09:17
Para comprobar también lo puedes hacer desde la línea de comandos:


more fichero.csv


Lo puedes guardar con otra codificación y repites lo anterior.

Kuk
4 de agosto de 2022, 10:25
@Juanes, como dice @JCantero es un problema de codificación de caracteres. Vete a la configuración de la base y mira a ver cuál es su codificación (cotejmiento). Lo primero es eso, luego vemos cómo hacer para que coincida con tu fichero CSV.

Juanes
5 de agosto de 2022, 18:41
@Juanes, como dice @JCantero es un problema de codificación de caracteres. Vete a la configuración de la base y mira a ver cuál es su codificación (cotejmiento). Lo primero es eso, luego vemos cómo hacer para que coincida con tu fichero CSV.

Gracias a sus respuestas me dí cuenta que el problema está desde antes de generar el archivo csv.

Desde un programa de Powercobol accedo a unos datos generados con el programa rmcobol.
En Rmcobol muestra bien las eñes y tildes, pero cuando los visualizo desde el programa Powercobol muestra mal esos caracteres y desde ahí los pasa mal al archivo csv

Me disculpo porque dije en el mensaje que esos caracteres los visualizaba bien en powercobol, y en el archivo csv, y no es cierto, la verdad fue que esa información me la dió un auxiliar y no la verifiqué, lo siento.

Este archivo csv se lo debo pasar a un Proveedor Tecnológico para su integración con la Administración de impuestos, tengo que solucionar que mi archivo csv le llegue correctamente para ser procesada en su Base de Datos.

Les agradezco su valiosa ayuda para poder visualizar correctamente estos caracteres en powecobol.

Juanes
5 de agosto de 2022, 19:40
Gracias por su respuesta. Comprobé que al digitar datos nuevos desde el programa de powercobol, se ven correctamente las tildes y eñes, pero al revisar con el comando que usted me envío "more fichero.csv" los muestra mal.

Fito
6 de agosto de 2022, 01:04
Hola: te paso una dll que conseguí hace mucho tiempo para hacer la conversión de caracteres de archivos grabados en DOS a WIN


Working.....

01 WT2-PARMS IS GLOBAL EXTERNAL.
02 WT2-OPTION PIC X(3).
02 WT2-STRING PIC X(255).
02 WT2-RETURN PIC 9.



move nombre to wt2-string.
invoke pow-self "CallForm" using "WT2TW" "WT2TW".
move wt2-string to nombre.


Saludos

Fito...

Juanes
12 de agosto de 2022, 16:53
Muchas gracias Fito por su ayuda

Le comento que el archivo adjunto no lo pude descargar.

Me aparece mensaje: " El archivo tiene un formato desconocido o está dañado", es tan amable me lo puede reenviar.

Muchas gracias.

fastpho
12 de agosto de 2022, 20:00
@Juanes
Para poder descomprimir utiliza 7-zip , la descarga funciona perfectamente :)
Link : 7-Zip (https://www.7-zip.org/)

Saludos...

Juanes
17 de agosto de 2022, 15:23
Si lo pudé descargar con el 7-Zip, gracias, hice lo que me indican pero no pasa bien los caracteres de eñes y tildes.

JCantero
17 de agosto de 2022, 16:15
Para poder ayudarte te repito lo que te dije hace unas semanas:



En que base de datos estás importando el .csv (oracle, postgresql, access, sqlserver, mysql)
Que tipo de codificación (tabla de código) utilizas para las tablas que deseas importar (UTF, ISO_????, Latin?, WIN???)


Si desconoces el funcionamiento del Powercobol, Antes de generar el .csv, añade en un campo alfanumérico lo siguiente: ( en nombre, domicilio, donde sea)

áéíóúÁÉÍÓÚñÑ


Genera el fichero .csv y me lo envias.

Indica tambien la cuestión 1) y 2)

JCantero
17 de agosto de 2022, 16:40
Gracias por su respuesta. Comprobé que al digitar datos nuevos desde el programa de powercobol, se ven correctamente las tildes y eñes, pero al revisar con el comando que usted me envío "more fichero.csv" los muestra mal.

Dependiendo de idioma de la base de datos hay que realizar una transformación.

Si es Latin? o ISO???? con un "inspect" sobrará.

Si la BD está en UTF hay que hacer un bucle transformando cada carácter en 2 (asi es UTF)

Te añado el inspect : ( yo lo tengo para exportar datos de RM/cobol a BD en UTF)



* Variables de working
01 msql pic x(1200).


* si la BD es UTF pero lo haces por medio de ODBC
* puedes probar con esto (msql es la cadena a convertir)

inspect msql converting
'áéíóúÁÉÍÓÚñѺªçÇØøüÜàèìòùÀÈÌÒÙ'
to
'ßÚݾ·┴╔═Ë┌±Ð║¬þà uUßÚݾ·┴╔═Ë┌'






Logicamente al ver el csv veras caracteres extraños, debes de probar a importar en la BD para ver como queda.

Indica que caracteres ves en la BD al importar

- - - Updated - - -

Otra cosa que puedes hacer es suprimir los acentos y eñes (pero parece una chapucilla)


* Variables de working
01 msql pic x(1200).


inspect msql converting
'áéíóúÁÉÍÓÚñÑ'
to
'aeiouAEIOUnN'

Kuk
17 de agosto de 2022, 17:11
@JCantero, echa un ojo a FUNCTION NATIONAL-OF ;)

JCantero
17 de agosto de 2022, 17:15
@Kuk, en RM/COBOL eso no existe.

Para powercobol desconozco lo que pueda existir para resolver este problema.

Yo intentaba darle una solución con sentencias cobol standard

fastpho
17 de agosto de 2022, 18:23
Hola @Juanes, como te dicen @Kuk, @JCantero, tenes que preguntar a tu Proveedor Tecnológico
que formato del archivo CSV lo necesita , el powercobol esta en formato ANSI

Otra forma rapida podria ser utilizando la DLL de ChilKat , que tiene una
libreria que se llama CSV y con esta libreria podes convertir el archivo CSV
en el formato por ejemplo UTF-8 te paso un ejemplo como seria.

Hay una tabla donde estan todos los charset soportados
Link : Charset (Character Encodings) Supported by Chilkat Components (https://www.chilkatsoft.com/p/p_463.asp)


ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PATH-CVS-ANSI PIC X(256).
01 PATH-CVS-UTF PIC X(256).
01 ReturnValue PIC S9(9) COMP-5.
01 charset PIC X(5) VALUE "utf-8".
PROCEDURE DIVISION.
*------------------------------------------------------------------------------------
* LoadFile(path As String) As Long
* Loads a CSV from a file. It is assumed that the CSV file contains ANSI characters.
* Cargamos el archivo en formato ANSI de Cobol
MOVE "C:ARCHIVOSARCHIVOANSI.CSV" TO PATH-CVS-ANSI. *> Tu archivo de powercobol
INVOKE ChilkatCsv1 "LoadFile" USING PATH-CVS-ANSI RETURNING ReturnValue.
DISPLAY "Resultado Archivo cargado : " , ReturnValue. *> = 1 resultado positivo
*---------------------------------------------------
* SaveFile2(filename As String, charset As String) As Long
* Saves a CSV to a file. The charset specifies the character encoding to use for the CSV file.
* The text data is converted to this charset when saving.
* A list of supported character encodings may be found on this page: Supported Charsets.
* Grabamos el nuevo archivo de cobol en formato utf-8
MOVE "C:ARCHIVOSINFILEUTF8.CSV" TO PATH-CVS-UTF
INVOKE ChilkatCsv1 "SaveFile2" USING PATH-CVS-UTF charset RETURNING ReturnValue.
DISPLAY "Resultado Archivo convertido : " , ReturnValue *> = 1 resultado positivo


Saludos ....

JCantero
17 de agosto de 2022, 18:44
el powercobol esta en formato ANSI


Saludos ....

Si está en formato ANSI, creo que con el inspect que le he puesto va a funcionar. Pero tiene que probarlo y decirnos si no es así. Para cambiar los caracteres.

Yo realizo cambios de LATIN o ANSI a UTF y viceversa. Lo que ocurre que no lo tengo en rutina sino con un copy, asi que si @Juanes prueba lo que le digo podemos avanzar.

Juanes
7 de septiembre de 2022, 19:40
Hola quiero agradecerles a Kuk, JCantero, fastpho, Fito, quienes muy amablemente me dieron ideas para solucionar.

Me disculpo hasta ahora escribir debido a que tuve cirugía de ambos ojos.

Traté de averiguar respecto a la base de datos en la que se subía el archivo y nunca obtuve respuesta debido a que el archivo es para la administración de impuestos de mi país, y fue imposible.

Probé todas las posibles soluciones sugeridas y através de estas pruebas logré identificar que al convertir el archivo .csv a utf-8 si lo validaba correctamente con los caracteres especiales.

Entonces lo solucioné usando el siguiente comando powershell, para convertir el archivo .csv a utf-8.

INVOKE POW-SELF "Execute" USING 'powershell -command "Get-Content texto.csv" > texto-utf8.csv'
:bien:

Muchas gracias.