Lectura de carpeta en PC

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • nros
    Junior Member
    • abr
    • 1

    #1

    Lectura de carpeta en PC

    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
    Member
    • may
    • 44

    #2
    Espero esto te sirva
    Código:
    ***********************************************************************
    * 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

    Código:
    ************************************************************************
    * 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
    Código:
    PARAMETERS: P_ARCH LIKE  RLGRAP-FILENAME DEFAULT TEXT-002 OBLIGATORY.
    posteriormente cachas el evento del F4 con

    Código:
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ARCH.
    y mandas llamar la funcion

    Código:
      PERFORM F_ABRIR_ARCHIVO USING TEXT-004 C_MODE TEXT-005
                              CHANGING P_ARCH.
    Código:
    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.
    Editado por última vez por gib8107; 08/06/2006, 01:03:07.

    Comentario

    • Vero2007
      Member
      • mar
      • 38

      #3
      * 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 .

      Comentario

      • Vero2007
        Member
        • mar
        • 38

        #4
        TMP_GUI_DIRECTORY_LIST_FILES

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

        Comentario

        • Claudia Valdespino
          Member
          • mar
          • 54

          #5
          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.
          Saludos,

          Claudia V.

          Comentario

          • luisconmiedo
            Junior Member
            • sep
            • 1

            #6
            Leer ficheros de un directorio

            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.

            Comentario

            Trabajando...