En primer lugar, hay que aclarar que en los sistemas UNIX, todo se trata como un fichero; por lo tanto, el siguiente report primero "chequea" si la ruta es UNIX o es WINDOWS, y después pasa a comprobarla.
*&---------------------------------------------------------------------*
*& Report Z_COMPROBAR_RUTA
*&
*&---------------------------------------------------------------------*
*& Comprueba si la RUTA de un fichero existe
*&---------------------------------------------------------------------*
*& Alberto García de Haro
*& http://misprogramasabap.blogspot.com
*&---------------------------------------------------------------------*
*& Elementos de datos:
*& p_unix: Fichero UNIX
*& p_locl: Fichero local (Windows)
*& p_ruta: Ruta del fichero
*&---------------------------------------------------------------------*
REPORT z_comprobar_ruta.
CONSTANTS: long TYPE i VALUE 1024.
DATA: gv_existe TYPE c,
gv_ruta TYPE string.
SELECTION-SCREEN BEGIN OF BLOCK bl1.
PARAMETERS:
p_unix RADIOBUTTON GROUP gr1,
p_locl RADIOBUTTON GROUP gr1,
p_ruta LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK bl1.
START-OF-SELECTION.
IF p_locl EQ 'X'. "Fichero local
MOVE p_ruta TO gv_ruta.
CALL METHOD cl_gui_frontend_services=>directory_exist
EXPORTING
directory = gv_ruta
RECEIVING
result = gv_existe
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
ELSE. "Fichero UNIX
OPEN DATASET p_ruta FOR INPUT
IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
gv_existe = 'X'.
CLOSE DATASET gv_ruta.
ELSE.
gv_existe = space.
ENDIF.
ENDIF.
PERFORM extraer_ruta USING p_ruta.
END-OF-SELECTION.
WRITE /.
IF gv_existe EQ space.
WRITE 'No existe la ruta'.
ELSE.
WRITE 'Sí existe la ruta'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form extraer_ruta
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_RUTA text
*----------------------------------------------------------------------*
FORM extraer_ruta USING p_gv_ruta.
*Tabla para ir metiendo las palabras
DATA:
BEGIN OF lt_tab OCCURS 10,
campo(long) TYPE c,
END OF lt_tab,
"Palabras
lv_word1(long) TYPE c,
lv_word2(long) TYPE c,
lv_ruta LIKE rlgrap-filename, "Ruta SIN fichero
lv_fich(long) TYPE c. "Nombre del fichero
*Inicio del proceso
REFRESH lt_tab.
MOVE p_gv_ruta TO lv_ruta.
DO.
SPLIT lv_ruta AT '/' INTO lv_word1 lv_word2.
IF NOT lv_word1 IS INITIAL and not lv_word2 is initial .
MOVE lv_word1 TO lt_tab.
APPEND lt_tab. CLEAR lt_tab.
ENDIF.
MOVE lv_word2 TO lv_ruta.
IF lv_word2 IS INITIAL. "No se puede separar más
MOVE lv_word1 TO lv_fich.
EXIT.
ENDIF.
ENDDO.
"Ahora obtengo la ruta
CLEAR lv_ruta.
LOOP AT lt_tab.
CONCATENATE lv_ruta lt_tab-campo
INTO lv_ruta SEPARATED BY '/'.
ENDLOOP.
WRITE:
'La ruta SIN fichero es',
lv_ruta, /,
'El fichero es',
lv_fich.
ENDFORM. " extraer_ruta
*& Report Z_COMPROBAR_RUTA
*&
*&---------------------------------------------------------------------*
*& Comprueba si la RUTA de un fichero existe
*&---------------------------------------------------------------------*
*& Alberto García de Haro
*& http://misprogramasabap.blogspot.com
*&---------------------------------------------------------------------*
*& Elementos de datos:
*& p_unix: Fichero UNIX
*& p_locl: Fichero local (Windows)
*& p_ruta: Ruta del fichero
*&---------------------------------------------------------------------*
REPORT z_comprobar_ruta.
CONSTANTS: long TYPE i VALUE 1024.
DATA: gv_existe TYPE c,
gv_ruta TYPE string.
SELECTION-SCREEN BEGIN OF BLOCK bl1.
PARAMETERS:
p_unix RADIOBUTTON GROUP gr1,
p_locl RADIOBUTTON GROUP gr1,
p_ruta LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK bl1.
START-OF-SELECTION.
IF p_locl EQ 'X'. "Fichero local
MOVE p_ruta TO gv_ruta.
CALL METHOD cl_gui_frontend_services=>directory_exist
EXPORTING
directory = gv_ruta
RECEIVING
result = gv_existe
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
ELSE. "Fichero UNIX
OPEN DATASET p_ruta FOR INPUT
IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
gv_existe = 'X'.
CLOSE DATASET gv_ruta.
ELSE.
gv_existe = space.
ENDIF.
ENDIF.
PERFORM extraer_ruta USING p_ruta.
END-OF-SELECTION.
WRITE /.
IF gv_existe EQ space.
WRITE 'No existe la ruta'.
ELSE.
WRITE 'Sí existe la ruta'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form extraer_ruta
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_RUTA text
*----------------------------------------------------------------------*
FORM extraer_ruta USING p_gv_ruta.
*Tabla para ir metiendo las palabras
DATA:
BEGIN OF lt_tab OCCURS 10,
campo(long) TYPE c,
END OF lt_tab,
"Palabras
lv_word1(long) TYPE c,
lv_word2(long) TYPE c,
lv_ruta LIKE rlgrap-filename, "Ruta SIN fichero
lv_fich(long) TYPE c. "Nombre del fichero
*Inicio del proceso
REFRESH lt_tab.
MOVE p_gv_ruta TO lv_ruta.
DO.
SPLIT lv_ruta AT '/' INTO lv_word1 lv_word2.
IF NOT lv_word1 IS INITIAL and not lv_word2 is initial .
MOVE lv_word1 TO lt_tab.
APPEND lt_tab. CLEAR lt_tab.
ENDIF.
MOVE lv_word2 TO lv_ruta.
IF lv_word2 IS INITIAL. "No se puede separar más
MOVE lv_word1 TO lv_fich.
EXIT.
ENDIF.
ENDDO.
"Ahora obtengo la ruta
CLEAR lv_ruta.
LOOP AT lt_tab.
CONCATENATE lv_ruta lt_tab-campo
INTO lv_ruta SEPARATED BY '/'.
ENDLOOP.
WRITE:
'La ruta SIN fichero es',
lv_ruta, /,
'El fichero es',
lv_fich.
ENDFORM. " extraer_ruta
No hay comentarios:
Publicar un comentario