Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Duda] Caracteres extraños desde archivo csv (https://www.cobolforo.es/showthread.php?t=1509)

JCantero 17 de agosto de 2022 16:15

Para poder ayudarte te repito lo que te dije hace unas semanas:

  1. En que base de datos estás importando el .csv (oracle, postgresql, access, sqlserver, mysql)
  2. 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)

Código:

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

Genera el fichero .csv y me lo envias.

Indica tambien la cuestión 1) y 2)

JCantero 17 de agosto de 2022 16:40

Cita:

Citación del post de Juanes (Mensaje 8007)
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)


Código COBOL:
  1.      *  Variables de working
  2.        01 msql   pic x(1200).
  3.      
  4.  
  5.       * si la BD es UTF pero lo haces por medio de ODBC
  6.      * puedes probar con esto (msql es la cadena a convertir)
  7.  
  8.               inspect msql converting
  9.                   'áéíóúÁÉÍÓÚñѺªçÇØøüÜàèìòùÀÈÌÒÙ'
  10.                          to
  11.                   'ßÚݾ·┴╔═Ë┌±Ð║¬þà  uUßÚݾ·┴╔═Ë┌'
  12.  
  13.      
  14.  

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)

Código COBOL:
  1.      *  Variables de working
  2.        01 msql   pic x(1200).
  3.        
  4.  
  5.               inspect msql converting
  6.                   'áéíóúÁÉÍÓÚñÑ'
  7.                          to
  8.                   'aeiouAEIOUnN'
  9.  
  10.      
  11.  

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

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

JCantero 17 de agosto de 2022 18:44

Cita:

Citación del post de fastpho (Mensaje 8038)
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.

Código COBOL:
  1. INVOKE POW-SELF "Execute" USING 'powershell -command "Get-Content texto.csv" > texto-utf8.csv'
:bien:

Muchas gracias.


La franja horaria es GMT +2. Ahora son las 16:24.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.