PDA

Ver la Versión Completa : Lectura de carpeta en PC


nros
08/06/06, 00:07:24
Alguien sabe como leer todos los archivos contenidos en una carpeta, la cual se encuentra en la PC?
es decir si tengo la ruta C:\MIS DOCUMENTOS
saber los nombres de todos los archivos .txt que se encuentren en esta carpeta

gib8107
08/06/06, 01:55:47
Espero esto te sirva

***********************************************************************
* Nombre del Programa : ZGLR0021 *
* Título del Programa : carga XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
* Programador : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx *
* Fecha : *
* Última actualización : 01.07.2005 *
* *
* Descripción: *
* *
*----------------------------------------------------------------------*
* Lista de Modificaciones: *
* Data Autor Corr. # Descripción *
* 01.07.2005 XXXXXX xxxxxxxxxx Desarrollo inicial del prg *
************************************************************************
REPORT ZPDE0001
NO STANDARD PAGE HEADING "No muestra la cabecera patrón de SAP
LINE-SIZE 170 "Anchura del report de nnn caracteres
LINE-COUNT 58 "Comprimento del report de nn caract
MESSAGE-ID ZLEY "Clase de mensajes es ZLEY
.
*** Include para carga de archivo
INCLUDE ZBSD0002.
*****iNCLUDE DE vARIABLES
INCLUDE ZPDE0001_V.


************************************************************************
* Parámetros de entrada : *
* Select Options (S...) *
* Parameters (P...) *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_ARCH LIKE RLGRAP-FILENAME DEFAULT TEXT-002 OBLIGATORY.
PARAMETERS: P_GROUP LIKE APQI-GROUPID DEFAULT 'PRESTM' OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.


SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON (13) PUSHY USER-COMMAND JOB.
SELECTION-SCREEN END OF LINE.

INCLUDE ZPDE0001_F.
*----------------------------------------------------------------------*
*Evento: INITIALIZATION. "Tratamiento inicial del programa *
*----------------------------------------------------------------------*
*INITIALIZATION.
*----------------------------------------------------------------------*
*Evento: AT SELECTION-SCREEN. "Tratamiento de Errores y lógica para *
* tela de selección *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*--- Texto del Botón "Crear JOB"
MOVE TEXT-003 TO PUSHY.

AT SELECTION-SCREEN.
*--- Evento del proceso de fundo, donde se cria un JOB
IF SSCRFIELDS-UCOMM = 'JOB'.
CALL DIALOG 'JOB_SUBMIT'
EXPORTING
RALDB-REPORT FROM SY-REPID
RALDB-VARIANT FROM ' '.
ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ARCH.
*--- Busca del archivo con camino del fichero para procesamiento
PERFORM F_ABRIR_ARCHIVO USING TEXT-004 C_MODE TEXT-005
CHANGING P_ARCH.

*----------------------------------------------------------------------*
*Evento: AT LINE-SELECTION. "Tratamiento de logica de la pantalla *
*----------------------------------------------------------------------*
*AT LINE-SELECTION.

*----------------------------------------------------------------------*
* Evento: TOP-OF-PAGE "Tratamiento para cabecera del listado *
*----------------------------------------------------------------------*
TOP-OF-PAGE.

*** Prepara Cabecera del Interfase
PERFORM F_PREPARA_CABECERA.

*----------------------------------------------------------------------*
* Event: START-OF-SELECTION "Inicio de la lógica del programa *
*----------------------------------------------------------------------*
START-OF-SELECTION.
*--- Busca datos del usuário
V_HORAINICIO = SY-UZEIT.

PERFORM F_BUSCA_DATOS_USUARIO.
*** Busca archivo de acuerdo con fichero indicado en la pantalla
PERFORM F_BUCSCA_ARCHIVO TABLES T_DATA_TAB USING P_ARCH
CHANGING V_CHECK.





el include que viene INCLUDE ZBSD0002.
el de las variables no lo ocupas


************************************************************************
* Nombre del Programa : ZGLR0021 *
* Título del Programa : Include con funciones de archivos
* Programador : XXXXXXXXXXXXXXXXXXXXXXXXXXXXxxx*
* Fecha : *
* Última actualización : 08/09/2004 *
* *
* Descripción: *
* *
*----------------------------------------------------------------------*
* Lista de Modificaciones: *
* Data Autor Corr. # Descripción *
* 08/09/2004 xxxxxxxxxxxxxx xxxxxxxxxx Desarrollo inicial del prg *
* Descripción : Para se utilizar esta INCLUDE, se debe hacer: *
* *
* Definir en el programa principal, la tabla temporal: *
* - TYPES: BEGIN OF TY_DATA_TAB, *
* LINE TYPE STRING. *
* TYPES: END OF TY_DATA_TAB. *
* DATA: T_DATA_TAB con base en el tipo TY_DATA_TAB *
* *
* Definir en el programa principal, el parámetro del archivo: *
* - P_ARCH con base en la estructura RLGRAP-FILENAME *
* - P_MASK con tipo char de 80 para máscara del tipos de archivos *
* - P_MODE con tipo char de uno siendo ( S = Save, O = Open ) *
* - P_TITLE con titulo de la ventana de busquéta *
* *
*<< Llamadas de Subrutinas possíbles de ser utilizados nesta include:>>*
* *
*- Busca del archivo con camino del fichero para procesamiento *
* PERFORM F_ABRIR_ARCHIVO USING TEXT-004 C_MODE TEXT-005 *
* CHANGING P_ARCH. *
* *
*** Busca archivo de acuerdo con fichero indicado en la pantalla *
* PERFORM F_BUCSCA_ARCHIVO TABLES T_DATA_TAB USING P_ARCH *
* CHANGING V_CHECK. *
* *
*** Ejecuta envío del archivo *
* PERFORM F_ENVIA_ARCHIVO_ERROR TABLES T_DATA_TAB USING P_LOG. *
************************************************************************


************************************************************************
* Datos: *
* Estructuras (E...) *
************************************************************************
DATA: BEGIN OF E_DATA_TAB, "Estructura del Archivo
LINE(1000) TYPE C. "TYPE STRING.
DATA: END OF E_DATA_TAB.

************************************************************************
* Datos: *
* Variables (V...) *
************************************************************************
DATA: V_FILENAME TYPE STRING. "Ruta del archivo
*&---------------------------------------------------------------------*
*& Form F_BUCSCA_ARCHIVO
*&---------------------------------------------------------------------*
FORM F_BUCSCA_ARCHIVO TABLES T_DATA_TAB STRUCTURE E_DATA_TAB
USING P_FILENAME LIKE RLGRAP-FILENAME
CHANGING V_CHECK TYPE C.

CLEAR: V_FILENAME, T_DATA_TAB.
REFRESH: T_DATA_TAB.

IF NOT SY-BATCH IS INITIAL.

*** Abre Archivo
OPEN DATASET P_FILENAME FOR INPUT IN TEXT MODE ENCODING NON-UNICODE.
IF sy-subrc NE 0.
IF sy-batch EQ space.
MESSAGE I320(bf00) WITH P_FILENAME.
ELSE.
MESSAGE S320(bf00) WITH P_FILENAME.
MOVE 'X' TO V_CHECK.
STOP.
ENDIF.
ENDIF.

*** Busca datos del Archivo en servidor
DO.
CLEAR: E_DATA_TAB, V_FILENAME.
READ DATASET P_FILENAME INTO V_FILENAME.
IF sy-subrc NE 0.
EXIT.
ELSE.
MOVE V_FILENAME TO E_DATA_TAB.
APPEND E_DATA_TAB TO T_DATA_TAB.
ENDIF.
ENDDO.

*** Cerra Archivo
CLOSE DATASET P_FILENAME. "Cerra Archivo

ELSE.

MOVE P_FILENAME TO V_FILENAME.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FILENAME
TABLES
DATA_TAB = T_DATA_TAB[]
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.

IF SY-SUBRC <> 0.
MESSAGE I008.
MOVE 'X' TO V_CHECK.
STOP.
ENDIF.

ENDIF.

IF T_DATA_TAB[] IS INITIAL.
MESSAGE S013 WITH V_FILENAME.
MOVE 'X' TO V_CHECK.
STOP.
ENDIF.

ENDFORM. " F_BUCSCA_ARCHIVO
*&---------------------------------------------------------------------*
*& Form F_ABRIR_ARCHIVO
*&---------------------------------------------------------------------*
FORM F_ABRIR_ARCHIVO USING P_MASK TYPE CHAR80
P_MODE TYPE C
P_TITLE TYPE ANY
CHANGING P_FILENAME LIKE RLGRAP-FILENAME.

DATA: vl_mask(80) TYPE c,
vl_filename LIKE rlgrap-filename.

vl_mask = P_MASK.

CALL FUNCTION 'WS_FILENAME_GET' "#EC

EXPORTING
def_filename = P_FILENAME
mask = vl_mask
mode = P_MODE
title = P_TITLE
IMPORTING
filename = vl_filename
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.

IF sy-subrc = 0.
P_FILENAME = vl_filename.
ELSEIF sy-subrc <> 3.
MESSAGE I008. STOP.
ENDIF.

ENDFORM. " F_ABRIR_ARCHIVO
*&---------------------------------------------------------------------*
*& Form F_ENVIA_ARCHIVO_ERROR
*&---------------------------------------------------------------------*
FORM F_ENVIA_ARCHIVO_ERROR TABLES T_DATA_TAB STRUCTURE E_DATA_TAB
USING P_FILENAME LIKE RLGRAP-FILENAME.

CLEAR V_FILENAME.

IF NOT SY-BATCH IS INITIAL.

*** Abre Archivo
OPEN DATASET P_FILENAME FOR OUTPUT IN TEXT MODE ENCODING NON-UNICODE.
IF sy-subrc NE 0.
IF sy-batch EQ space.
MESSAGE I324(bf00) WITH P_FILENAME.
ELSE.
MESSAGE S324(bf00) WITH P_FILENAME.
ENDIF.
ENDIF.

*** Transfere Archivo para servidor
LOOP AT T_DATA_TAB.
TRANSFER T_DATA_TAB TO P_FILENAME.
ENDLOOP.

*** Cerra Archivo
CLOSE DATASET P_FILENAME.

ELSE.

MOVE P_FILENAME TO V_FILENAME.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = V_FILENAME
TABLES
DATA_TAB = T_DATA_TAB
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
OTHERS = 22.

IF SY-SUBRC <> 0.
MESSAGE I020 WITH V_FILENAME.
ENDIF.

ENDIF.

ENDFORM. " F_ENVIA_ARCHIVO_ERROR


esencialmente es como sigue
defines un parametro de seleccion asi como se ilustra acontinuacion
PARAMETERS: P_ARCH LIKE RLGRAP-FILENAME DEFAULT TEXT-002 OBLIGATORY.

posteriormente cachas el evento del F4 con

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ARCH. y mandas llamar la funcion

PERFORM F_ABRIR_ARCHIVO USING TEXT-004 C_MODE TEXT-005
CHANGING P_ARCH.


AT SELECTION-SCREEN OUTPUT.
*--- Texto del Botón "Crear JOB"
MOVE TEXT-003 TO PUSHY.

AT SELECTION-SCREEN.
*--- Evento del proceso de fundo, donde se cria un JOB
IF SSCRFIELDS-UCOMM = 'JOB'.
CALL DIALOG 'JOB_SUBMIT'
EXPORTING
RALDB-REPORT FROM SY-REPID
RALDB-VARIANT FROM ' '.
ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ARCH.
*--- Busca del archivo con camino del fichero para procesamiento
PERFORM F_ABRIR_ARCHIVO USING TEXT-004 C_MODE TEXT-005
CHANGING P_ARCH.



y pues dicha funcion yo la puse en un uinclude ya que no es lo unico que se maneja con archivos pues puse funciones similares en el include

Adicionalmente

con esta funcion puedes leer el archivo
PERFORM F_BUCSCA_ARCHIVO TABLES T_DATA_TAB USING P_ARCH
CHANGING V_CHECK.
que tambien esta en el include

es decir la primer funcion es para que puedas obtener la ruta con F4 alo mejor no te interesa

pero la segunda funcion F_BUSCA_ARCHIVO TE REGRESA EN T_DATA_TAB LO QUE TENGAS EN EL ARCHIVO DE TEXTO PLANO

A POR SI ACASO T_DATA_TAB DEVE DE SER DECLARADA ASI
DATA: BEGIN OF E_DATA_TAB, "Estructura del Archivo
LINE(1000) TYPE C. "TYPE STRING.
DATA: END OF E_DATA_TAB.

Vero2007
23/03/07, 09:47:52
* Devuelve una lista con todos los ficheros de la carpeta especificada
CALL FUNCTION 'SUBST_GET_FILE_LIST'
EXPORTING
DIRNAME = carpeta_orig
FILENM = '*'
PATTERN = '*'
TABLES
FILE_LIST = itab_lista .

Vero2007
23/03/07, 09:57:45
TMP_GUI_DIRECTORY_LIST_FILES

Esa funcion tambien puede encontrar todos los fichero que hay en un directorio

Claudia Valdespino
28/03/07, 22:20:36
Hola, para obtener el nombre de los archivos de un fichero utiliza:

perform obtener_archivos_directorio using v_ruta
changing t_texto[].

*&---------------------------------------------------------------------*
*& Form obtener_archivos_directorio
*&---------------------------------------------------------------------*
* Se encarga de obtener la lista (nombres) de archivos que se
* encuentran en la ruta de archivo especificada
*----------------------------------------------------------------------*
form obtener_archivos_directorio using p_dirname type c
changing p_archivos like t_fichero[].

data: lw_searchpoints type ty_searchpoints,
errno(3) type c,
errmsg(40) type c,
name(75) type c,
w_archivo like t_fichero.

clear lw_searchpoints.

refresh p_archivos.
concatenate p_dirname '/' into lw_searchpoints-dirname.
lw_searchpoints-sp_name = '*'.

call 'C_DIR_READ_FINISH' " just to be sure
id 'ERRNO' field errno
id 'ERRMSG' field errmsg.
clear: errno, errmsg.

call 'C_DIR_READ_START' id 'DIR' field lw_searchpoints-dirname
id 'FILE' field lw_searchpoints-sp_name
id 'ERRNO' field errno
id 'ERRMSG' field errmsg.

if sy-subrc <> 0.
exit.
endif.

do.
call 'C_DIR_READ_NEXT'
id 'NAME' field name.

if sy-subrc = 0.
clear w_archivo.
w_archivo-texto = name.
append w_archivo to p_archivos.
else.
exit.
endif.
enddo.

close dataset lw_searchpoints-dirname.
endform. "obtener_archivos_directorio


Al final en la tabla p_archivo (t_texto[]) tienes los nombres de los archivos del directorio que pusiste.

luisconmiedo
09/04/08, 22:05:26
FORM cargar_lista_archivos .

DATA: nombre(250) TYPE c,
temporal(250) TYPE c,
archivos TYPE TABLE OF rsfillst,
directorios TYPE TABLE OF sdokpath.

temporal = destino.

CONCATENATE temporal '\' INTO nombre.
CONDENSE nombre.
CALL FUNCTION 'TMP_GUI_DIRECTORY_LIST_FILES'
EXPORTING
directory = nombre
* FILTER = '*.*'
* IMPORTING
* FILE_COUNT =
* DIR_COUNT =
TABLES
file_table = archivos
dir_table = directorios
* EXCEPTIONS
* CNTL_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ENDFORM. " cargar_lista_archivos

Efectivamente con este modulo de funcio (TMP_GUI_DIRECTORY_LIST_FILES) se leen los ficheros que posee un archivo y adicionalmente entrega los nombres de otros ficheros que puedan estar al interior. Yo moleste un rato con las otras opciones y ninguna funcionaba y en definitiva esta es la mas practica. Por favor tengan en cuenta que la ruta del directorio debe terminar en "/" para UNIX y en "\" para windows. A mi me quito dos horas solo por no agregar esta terminacion a la ruta.