jueves, 22 de noviembre de 2007

Comprobar la existencia de una RUTA

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

No hay comentarios: