lunes, 11 de agosto de 2014

Leer archivos de texto desde el App Server (Problemas con encoding)

Si alguna vez se encuentran con el problema de que están creando un archivo de  texto en el aplication server de su sistema de SAP y a la hora de leerlo les da problemas, prueben la siguiente solución.

Recientemente tuve que crear un archivo TXT con un reporte de documentos, al crearlo utilicé el open dataset normal con el encoding default, el archivo era un archivo separado por tabs, después de crear el archivo, si lo descargaba desde el app server usando la transacción CG3Y con formato ASCI, podiamos visualizar el archivo correctamente alineado, pensabamos que todo estaba bien, pero cuando tratabamos de visualizar el archivo desde windows accesando directamente al drive del server de sap(Unidad mapeada en windows), teniamos problemas de alineado, los tabs se respetaban, pero los saltos de linea no se respetaban usando notepad, al parecer esta problema se da porque los archivos en el server directamente no estan convertidos a ASCI, cosa que si pasa cuando usamos la transacción CG3Y.
La solución para esto fue utilizar el encoding UTF-8, este encoding le permite al notepad interpretar los saltos de página(que se tienen que especificar al final de cada line cuando se crea el file usando el valor Hexadecimal CL_ABAP_CHAR_UTILITIES=>CR_LF ).

Si no tienen forma de accesar los archivos directamente del server para probar la visualización, pueden descargarlo con la CG3Y utilizando el formato BIN, asi estarán viendo una version igual a la guardad en el server.

Código:
  DATAgw_lines TYPE string.
  OPEN DATASET gv_filename FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
  IF sy-subrc <> 0.
    lv_rc sy-subrc.
  ENDIF.

  LOOP AT ut_file INTO gw_lines.
    TRANSFER gw_lines TO gv_filename.
  ENDLOOP.

  CLOSE DATASET gv_filename.


Ojalá esto sea de ayuda.

Saludos

1 comentario:

  1. Hola buen día, disculpa tengo el mismo problema, pero en tu código no veo donde utilizas el salto de linea CL_ABAP_CHAR_UTILITIES=>CR_LF, podrias ayudarme

    ResponderEliminar