1.  
  2. REPORT zprg_file_sar LINE-SIZE 1023.
  3.  
  4. PARAMETERS: p_file TYPE file_name LOWER CASE OBLIGATORY DEFAULT '',
  5.  
  6.             r_01   RADIOBUTTON GROUP rdir DEFAULT 'X',
  7.             r_02   RADIOBUTTON GROUP rdir,
  8.  
  9.             p_find TYPE as4text LOWER CASE OBLIGATORY,
  10.             p_repl TYPE as4text LOWER CASE OBLIGATORY,
  11.  
  12.             p_bak  AS CHECKBOX DEFAULT 'X',
  13.             p_pc   AS CHECKBOX DEFAULT ' ',
  14.             p_test AS CHECKBOX DEFAULT 'X'.
  15.  
  16.  
  17. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  18.   PERFORM help_me.
  19.  
  20. INITIALIZATION.
  21.  
  22.  
  23. end-of-SELECTION.
  24.  
  25.   IF r_02 = abap_true or p_file ca '*'.
  26.     PERFORM find_files USING p_file.
  27.   ELSE.
  28.     PERFORM hard_work USING p_file.
  29.   ENDIF.
  30.  
  31. FORM help_me.
  32.   DATA: lv_file  TYPE file_name.
  33.   lv_file = p_file.
  34.   CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
  35.     EXPORTING
  36.       directory        = lv_file
  37.       filemask         = '*.*'
  38.     IMPORTING
  39.       serverfile       = p_file
  40.     EXCEPTIONS
  41.       canceled_by_user = 1
  42.       OTHERS           = 2.
  43.   IF sy-subrc <> 0.
  44. * Implement suitable error handling here
  45.   ENDIF.
  46.  
  47. ENDFORM.
  48.  
  49. FORM find_files USING p_file.
  50.  
  51.   DATA: p_dir  TYPE epsf-epsdirnam,
  52.         t_file TYPE STANDARD TABLE OF epsfili,
  53.         l_mask type EPSF-EPSFILNAM.
  54.   p_dir = p_file.
  55.   l_mask = '*.*'.
  56.   if p_dir ca '*'.
  57.         DATA: l_my_file TYPE file_name,
  58.               l_file_path type file_name.
  59.  
  60.         CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
  61.           EXPORTING
  62.             full_name     = p_dir
  63.           IMPORTING
  64.             stripped_name = l_my_file
  65.             FILE_PATH     = l_file_path
  66.           EXCEPTIONS
  67.             x_error       = 1
  68.             OTHERS        = 2.
  69.         if sy-subrc eq 0 and
  70.            not l_my_file is INITIAL and
  71.            not l_file_path is initial.
  72.           p_dir = l_file_path.
  73.           l_mask = l_my_file.
  74.           else.
  75.             exit.
  76.         endif.
  77.   endif.
  78.   CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
  79.     EXPORTING
  80.       dir_name               = p_dir
  81.       file_mask              = l_mask
  82. *   IMPORTING
  83. *     DIR_NAME               =
  84. *     FILE_COUNTER           =
  85. *     ERROR_COUNTER          =
  86.     TABLES
  87.       dir_list               = t_file
  88.     EXCEPTIONS
  89.       invalid_eps_subdir     = 1
  90.       sapgparam_failed       = 2
  91.       build_directory_failed = 3
  92.       no_authorization       = 4
  93.       read_directory_failed  = 5
  94.       too_many_read_errors   = 6
  95.       empty_directory_list   = 7
  96.       OTHERS                 = 8.
  97.   if sy-subrc eq 0.
  98.   LOOP AT t_file INTO DATA(l_file).
  99.     CONCATENATE p_dir '/' l_file-name INTO DATA(l_new_file).
  100.     DO 2 TIMES.
  101.       REPLACE ALL OCCURRENCES OF '//' IN l_new_file WITH '/'.
  102.     ENDDO.
  103.     PERFORM hard_work USING l_new_file.
  104.   ENDLOOP.
  105.   else.
  106.     WRITE: / sy-datum, sy-uzeit, 'No se han encontrado ficheros', l_mask, 'en', p_dir.
  107.   endif.
  108.  
  109. ENDFORM.
  110.  
  111. FORM hard_work USING p_fil.
  112.   DATA: l_s     TYPE string,
  113.         t_s     TYPE STANDARD TABLE OF string,
  114.         t_bak   TYPE STANDARD TABLE OF string,
  115.         l_found TYPE xfeld.
  116.  
  117.   CLEAR l_found.
  118.   WRITE: / sy-datum, sy-uzeit, 'Abriendo', p_fil.
  119.   OPEN DATASET p_fil FOR INPUT IN TEXT MODE ENCODING DEFAULT.
  120.   IF sy-subrc EQ 0.
  121.  
  122.     DO.
  123.       READ DATASET p_fil INTO l_s.
  124.       IF sy-subrc NE 0.
  125.         EXIT.
  126.       ENDIF.
  127.       DATA(l_bak) = l_s.
  128.       FIND p_find IN l_s.
  129.       IF sy-subrc EQ 0.
  130.         l_found = abap_true.
  131.         REPLACE ALL OCCURRENCES OF p_find IN l_s WITH p_repl.
  132.       ENDIF.
  133.       APPEND l_bak TO t_bak.
  134.       APPEND l_s TO t_s.
  135.  
  136.     ENDDO.
  137.     IF l_found = abap_true.
  138.  
  139.       IF NOT p_bak IS INITIAL.
  140.         LOOP AT t_bak INTO l_s.
  141.           AT FIRST.
  142.             WRITE: / '** INICIO Backup', p_fil.
  143.           ENDAT.
  144.           WRITE: / l_s.
  145.           AT LAST.
  146.             WRITE: / '** FIN Backup', p_fil.
  147.           ENDAT.
  148.         ENDLOOP.
  149.       ENDIF.
  150.  
  151.       IF NOT p_pc IS INITIAL.
  152.  
  153.         DATA: l_my_file TYPE file_name.
  154.  
  155.         CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
  156.           EXPORTING
  157.             full_name     = p_fil
  158.           IMPORTING
  159.             stripped_name = l_my_file
  160. *           FILE_PATH     =
  161.           EXCEPTIONS
  162.             x_error       = 1
  163.             OTHERS        = 2.
  164.         IF sy-subrc ne 0.
  165.           WRITE: / sy-datum, sy-uzeit, 'Error al descargar', p_fil, ', se cancela operación.'.
  166.         else.
  167. * Implement suitable error handling here
  168.           l_s =  l_my_file.
  169.           DATA: ls_01 TYPE string,
  170.                 ls_02 TYPE string,
  171.                 ls_03 TYPE string.
  172.  
  173.           CALL METHOD cl_gui_frontend_services=>file_save_dialog
  174.             EXPORTING
  175.               window_title              = 'Descargar fichero'
  176. *             default_extension         =
  177.               default_file_name         = l_s
  178. *             with_encoding             =
  179. *             file_filter               =
  180. *             initial_directory         =
  181. *             prompt_on_overwrite       = 'X'
  182.             CHANGING
  183.               filename                  = ls_01
  184.               path                      = ls_02
  185.               fullpath                  = ls_03
  186. *             user_action               =
  187. *             file_encoding             =
  188.             EXCEPTIONS
  189.               cntl_error                = 1
  190.               error_no_gui              = 2
  191.               not_supported_by_gui      = 3
  192.               invalid_default_file_name = 4
  193.               OTHERS                    = 5.
  194.           IF sy-subrc = 0.
  195.  
  196.  
  197.             CALL METHOD cl_gui_frontend_services=>gui_download
  198.               EXPORTING
  199. *               bin_filesize            =
  200.                 filename                = ls_03
  201.                 filetype                = 'ASC'
  202. *               append                  = SPACE
  203. *               write_field_separator   = SPACE
  204. *               header                  = '00'
  205. *               trunc_trailing_blanks   = SPACE
  206. *               write_lf                = 'X'
  207. *               col_select              = SPACE
  208. *               col_select_mask         = SPACE
  209. *               dat_mode                = SPACE
  210. *               confirm_overwrite       = SPACE
  211. *               no_auth_check           = SPACE
  212. *               codepage                = SPACE
  213. *               ignore_cerr             = ABAP_TRUE
  214. *               replacement             = '#'
  215. *               write_bom               = SPACE
  216. *               trunc_trailing_blanks_eol = 'X'
  217. *               wk1_n_format            = SPACE
  218. *               wk1_n_size              = SPACE
  219. *               wk1_t_format            = SPACE
  220. *               wk1_t_size              = SPACE
  221. *               show_transfer_status    = 'X'
  222. *               fieldnames              =
  223. *               write_lf_after_last_line  = 'X'
  224. *               virus_scan_profile      = '/SCET/GUI_DOWNLOAD'
  225. *  IMPORTING
  226. *               filelength              =
  227.               CHANGING
  228.                 data_tab                = t_bak
  229.               EXCEPTIONS
  230.                 file_write_error        = 1
  231.                 no_batch                = 2
  232.                 gui_refuse_filetransfer = 3
  233.                 invalid_type            = 4
  234.                 no_authority            = 5
  235.                 unknown_error           = 6
  236.                 header_not_allowed      = 7
  237.                 separator_not_allowed   = 8
  238.                 filesize_not_allowed    = 9
  239.                 header_too_long         = 10
  240.                 dp_error_create         = 11
  241.                 dp_error_send           = 12
  242.                 dp_error_write          = 13
  243.                 unknown_dp_error        = 14
  244.                 access_denied           = 15
  245.                 dp_out_of_memory        = 16
  246.                 disk_full               = 17
  247.                 dp_timeout              = 18
  248.                 file_not_found          = 19
  249.                 dataprovider_exception  = 20
  250.                 control_flush_error     = 21
  251.                 not_supported_by_gui    = 22
  252.                 error_no_gui            = 23
  253.                 OTHERS                  = 24.
  254.           ENDIF.
  255.         ENDIF.
  256.  
  257.       ENDIF.
  258.  
  259.       IF p_test IS INITIAL.
  260.         DELETE DATASET p_fil.
  261.         WRITE: / sy-datum, sy-uzeit, 'Borrando', p_fil.
  262.         OPEN DATASET p_fil FOR OUTPUT IN TEXT MODE  ENCODING DEFAULT.
  263.         WRITE: / sy-datum, sy-uzeit, 'Creando', p_fil.
  264.         LOOP AT t_s INTO l_s.
  265.           TRANSFER l_s TO p_fil.
  266.         ENDLOOP.
  267.         CLOSE DATASET p_fil.
  268.       ELSE.
  269.         WRITE: / sy-datum, sy-uzeit, 'Encontrado [', p_find, '] en', p_fil.
  270.       ENDIF.
  271.     ENDIF.
  272.   ENDIF.
  273.  
  274. ENDFORM.