REPORT zprg_file_sar LINE-SIZE 1023.
PARAMETERS: p_file TYPE file_name LOWER CASE OBLIGATORY DEFAULT '',
r_01 RADIOBUTTON GROUP rdir DEFAULT 'X',
r_02 RADIOBUTTON GROUP rdir,
p_find TYPE as4text LOWER CASE OBLIGATORY,
p_repl TYPE as4text LOWER CASE OBLIGATORY,
p_bak AS CHECKBOX DEFAULT 'X',
p_pc AS CHECKBOX DEFAULT ' ',
p_test AS CHECKBOX DEFAULT 'X'.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM help_me.
INITIALIZATION.
end-of-SELECTION.
IF r_02 = abap_true or p_file ca '*'.
PERFORM find_files USING p_file.
ELSE.
PERFORM hard_work USING p_file.
ENDIF.
FORM help_me.
DATA: lv_file TYPE file_name.
lv_file = p_file.
CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
EXPORTING
directory = lv_file
filemask = '*.*'
IMPORTING
serverfile = p_file
EXCEPTIONS
canceled_by_user = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM find_files USING p_file.
DATA: p_dir TYPE epsf-epsdirnam,
t_file TYPE STANDARD TABLE OF epsfili,
l_mask type EPSF-EPSFILNAM.
p_dir = p_file.
l_mask = '*.*'.
if p_dir ca '*'.
DATA: l_my_file TYPE file_name,
l_file_path type file_name.
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = p_dir
IMPORTING
stripped_name = l_my_file
FILE_PATH = l_file_path
EXCEPTIONS
x_error = 1
OTHERS = 2.
if sy-subrc eq 0 and
not l_my_file is INITIAL and
not l_file_path is initial.
p_dir = l_file_path.
l_mask = l_my_file.
else.
exit.
endif.
endif.
CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
EXPORTING
dir_name = p_dir
file_mask = l_mask
* IMPORTING
* DIR_NAME =
* FILE_COUNTER =
* ERROR_COUNTER =
TABLES
dir_list = t_file
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.
if sy-subrc eq 0.
LOOP AT t_file INTO DATA(l_file).
CONCATENATE p_dir '/' l_file-name INTO DATA(l_new_file).
DO 2 TIMES.
REPLACE ALL OCCURRENCES OF '//' IN l_new_file WITH '/'.
ENDDO.
PERFORM hard_work USING l_new_file.
ENDLOOP.
else.
WRITE: / sy-datum, sy-uzeit, 'No se han encontrado ficheros', l_mask, 'en', p_dir.
endif.
ENDFORM.
FORM hard_work USING p_fil.
DATA: l_s TYPE string,
t_s TYPE STANDARD TABLE OF string,
t_bak TYPE STANDARD TABLE OF string,
l_found TYPE xfeld.
CLEAR l_found.
WRITE: / sy-datum, sy-uzeit, 'Abriendo', p_fil.
OPEN DATASET p_fil FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
READ DATASET p_fil INTO l_s.
IF sy-subrc NE 0.
EXIT.
ENDIF.
DATA(l_bak) = l_s.
FIND p_find IN l_s.
IF sy-subrc EQ 0.
l_found = abap_true.
REPLACE ALL OCCURRENCES OF p_find IN l_s WITH p_repl.
ENDIF.
APPEND l_bak TO t_bak.
APPEND l_s TO t_s.
ENDDO.
IF l_found = abap_true.
IF NOT p_bak IS INITIAL.
LOOP AT t_bak INTO l_s.
AT FIRST.
WRITE: / '** INICIO Backup', p_fil.
ENDAT.
WRITE: / l_s.
AT LAST.
WRITE: / '** FIN Backup', p_fil.
ENDAT.
ENDLOOP.
ENDIF.
IF NOT p_pc IS INITIAL.
DATA: l_my_file TYPE file_name.
CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = p_fil
IMPORTING
stripped_name = l_my_file
* FILE_PATH =
EXCEPTIONS
x_error = 1
OTHERS = 2.
IF sy-subrc ne 0.
WRITE: / sy-datum, sy-uzeit, 'Error al descargar', p_fil, ', se cancela operación.'.
else.
* Implement suitable error handling here
l_s = l_my_file.
DATA: ls_01 TYPE string,
ls_02 TYPE string,
ls_03 TYPE string.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Descargar fichero'
* default_extension =
default_file_name = l_s
* with_encoding =
* file_filter =
* initial_directory =
* prompt_on_overwrite = 'X'
CHANGING
filename = ls_01
path = ls_02
fullpath = ls_03
* user_action =
* file_encoding =
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
IF sy-subrc = 0.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
* bin_filesize =
filename = ls_03
filetype = 'ASC'
* append = SPACE
* write_field_separator = SPACE
* header = '00'
* trunc_trailing_blanks = SPACE
* write_lf = 'X'
* col_select = SPACE
* col_select_mask = SPACE
* dat_mode = SPACE
* confirm_overwrite = SPACE
* no_auth_check = SPACE
* codepage = SPACE
* ignore_cerr = ABAP_TRUE
* replacement = '#'
* write_bom = SPACE
* trunc_trailing_blanks_eol = 'X'
* wk1_n_format = SPACE
* wk1_n_size = SPACE
* wk1_t_format = SPACE
* wk1_t_size = SPACE
* show_transfer_status = 'X'
* fieldnames =
* write_lf_after_last_line = 'X'
* virus_scan_profile = '/SCET/GUI_DOWNLOAD'
* IMPORTING
* filelength =
CHANGING
data_tab = t_bak
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
ENDIF.
ENDIF.
ENDIF.
IF p_test IS INITIAL.
DELETE DATASET p_fil.
WRITE: / sy-datum, sy-uzeit, 'Borrando', p_fil.
OPEN DATASET p_fil FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
WRITE: / sy-datum, sy-uzeit, 'Creando', p_fil.
LOOP AT t_s INTO l_s.
TRANSFER l_s TO p_fil.
ENDLOOP.
CLOSE DATASET p_fil.
ELSE.
WRITE: / sy-datum, sy-uzeit, 'Encontrado [', p_find, '] en', p_fil.
ENDIF.
ENDIF.
ENDIF.
ENDFORM.