Espacios a la derecha archivo TXT

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • vsuarezo
    Member
    • abr
    • 47

    #1

    Espacios a la derecha archivo TXT

    Buenas tardes,

    Tengo definida una ta bla interna REC de la siguiente forma:

    DATA: BEGIN OF REG OCCURS 100,
    CAMPO(100) TYPE C,
    END OF REG.

    y otra ADIC así:

    DATA: BEGIN OF ADIC OCCURS 100,
    TIPO_REG(1) TYPE N VALUE 3,
    NUM_FAC(10) TYPE C,
    REFER(10) TYPE C,
    SIG_BRU(1) TYPE C,
    VAL_BRU(10) TYPE N,
    SIG_AJUS(1) TYPE C,
    VAL_AJUS(10) TYPE N,
    SIG_NET(1) TYPE C,
    VAL_NET(10) TYPE N,
    FILLER(41) TYPE C VALUE SPACE,
    END OF ADIC.

    Con el siguiente código, paso el contenido de ADIC a REG:

    CLEAR REG.
    REG = ADIC.
    APPEND REG.

    El conenido de FILLER son espacioes en blanco.
    ¿Que debo hacer para que cuando pase el contenido de ADIC a REG se conserven los espacios en blanco del campo FILLER?.

    Muchas Gracias
  • Edd_401
    Senior Member
    • may
    • 119

    #2
    No Entiendo Por Que Tiene El Space Dentro De Tu Tabla Interna O Para Que Lo Usas….

    Y Por Que Tan Largo (41.)

    Si Lo Que Desea Es Que Haya Un Espacio Entre Cada Uno De Tus Campos, Es Decir, Tabular….seria Asi:




    Loop At Adic.
    Clear Reg.

    Concatenate
    Adic- Tipo_reg
    Adic- Num_fac
    Adic- Refer
    Adic- Sig_bru
    Adic- Val_bru
    Adic- Sig_ajus
    Adic- Val_ajus
    Adic- Sig_net
    Adic- Val_net


    Into Reg-campo Separated By Space.

    Endloop.





    O Puedes Declara Antes}

    Data: Filler(41) Type C Default Space..

    Y En La Ultima Parte Poner:



    Into Reg-campo Separated By Filler.
    Sapero prodigio ! ! !

    Comentario

    • vsuarezo
      Member
      • abr
      • 47

      #3
      Espacios a la derecha archivo TXT

      Aclarando un poco mas lo que necesito es que al generar un archivo plano a partir de una tabla interna, todas las líneas del archivo plano deben quedar de la misma longitud. Ej. Si genero el siguiente archivo plano donde el acho máximo es 15 caracteres.

      XXXXXXXXXXXXXXX
      YYYYYYYY
      ZZZZZZZZZZZZZZZ

      Necesito que la abrirlo en algún editor de textos, al recorrer caracter a caracter la línea de las Y, al llegar a la última Y no salte a la siguiente línea sino que me permita llegar a la posición 15 de esa línea. Es decir que me deje espacios en blanco a la derecha y me pueda desplazar sobre ellos.

      Espero haber sido más claro.

      No es muy común que se requieran espacios en blanco al final de una línea pero por algún tipo de validación requieren que este archivo los tenga.

      Muchas gracias por su atención.

      Comentario

      • Dano
        Junior Member
        • abr
        • 13

        #4
        que tal.

        Aqui tambien utilizamos la transferencia mediante archivos de texto y asi es como la manejamos.
        Se declara la tabla interna con los caracteres necesarios:
        DATA: BEGIN OF t_inter OCCURS 0,
        line(225),
        END OF t_inter.


        se define la tabla donde se guardan los valores que necesitas:
        DATA: BEGIN OF ti_inter OCCURS 10,
        lifnr LIKE reguh-lifnr, " proveedor
        zbnkn LIKE reguh-zbnkn, " Cta. Destino
        blanc5(5) TYPE c, " espacio en blanco
        ubknt LIKE reguh-ubknt, " Cta. Origen
        blanc5_2(5) TYPE c, " espacio en blanco
        rwbtr LIKE reguh-rwbtr, " Monto
        blan_nom(30) TYPE c, " Información adicional para la transferencia.
        blanc10(10) TYPE c, " espacio en blanco
        laufd LIKE reguh-laufd, " Fecha de aplicación de la transferencia
        END OF ti_inter.


        Se declara una variable con los espacios necesarios.

        DATA: line(93). " LINEA PARA BAJAR ARCHIVO.


        Despues haces la asignacion de la tabla interna a la variable.

        MOVE: ctaorig TO line,
        ti_inter-blanc5 TO line+11(5),
        ctadest TO line+16(11),
        ti_inter-blanc5_2 TO line+27(5),
        monto TO line+32(13),
        ti_inter-blan_nom TO line+45(30),
        ti_inter-blanc10 TO line+75(10),
        ti_inter-laufd TO line+85(8).

        MOVE line TO t_inter.
        APPEND t_inter. CLEAR t_inter.



        Y bajamos el archivo de texto con la función DOWNLOAD

        CALL FUNCTION 'DOWNLOAD'
        EXPORTING
        filetype = 'ASC'
        item = 'COMER_INTER'
        IMPORTING
        cancel = cancel
        TABLES
        data_tab = t_inter
        EXCEPTIONS
        invalid_filesize = 1
        invalid_table_width = 2
        invalid_type = 3
        no_batch = 4
        unknown_error = 5
        gui_refuse_filetransfer = 6
        others = 7.


        Saludos

        Comentario

        • miguelonibus
          Junior Member
          • mar
          • 13

          #5
          Yo probaria a hacer un CONCATENATE de todos los campos en la tabla REG

          CONCATENATE
          TIPO_REG
          NUM_FAC
          REFER
          SIG_BRU
          VAL_BRU
          SIG_AJUS
          VAL_AJUS
          SIG_NET
          VAL_NET
          FILLER
          INTO REG

          APPEND REG.

          Asi funcionaria.

          Saludos.

          Comentario

          • vsuarezo
            Member
            • abr
            • 47

            #6
            Espacios a la derecha archivo TXT

            Probé con lo mencionado por DANO y por MIGUELONIBUS y aún no he podido resolver mi problema. De antemano muchas gracias

            Este es un ejemplo más real resumido de lo que estoy haciendo:

            PARAMETERS:
            P_DSN1(40) TYPE C LOWER CASE DEFAULT '/sapusers/bancos/pcol'.

            DATA: BEGIN OF REG OCCURS 100,
            CAMPO(100) TYPE C,
            END OF REG.

            DATA: BEGIN OF ADIC OCCURS 100,
            TIPO_REG(1) TYPE N VALUE 3,
            NUM_FAC(10) TYPE C,
            REFER(10) TYPE C,
            SIG_BRU(1) TYPE C,
            VAL_BRU(10) TYPE N,
            SIG_AJUS(1) TYPE C,
            VAL_AJUS(10) TYPE N,
            SIG_NET(1) TYPE C,
            VAL_NET(10) TYPE N,
            FILLER(41) TYPE C VALUE SPACE,
            END OF ADIC.

            CLEAR ADIC.
            ADIC-TIPO_REG = '3'.
            ADIC-NUM_FAC = '0000000000'.
            ADIC-REFER = '0000000000'.
            ADIC-SIG_BRU = '+'.
            ADIC-VAL_BRU = '0000000000'.
            ADIC-SIG_AJUS = '+'.
            ADIC-VAL_AJUS = '0000000000'.
            ADIC-SIG_NET = '+'.
            ADIC-VAL_NET = ‘125000000’.
            ADIC-FILLER = ‘TABORDA TAMAYO NELSON HERNAN ‘.

            APPEND ADIC.

            CLEAR REG.
            REG = ADIC.
            APPEND REG.

            CONCATENATE P_DSN1 SY-DATUM+4(2) SY-DATUM+6(2) '.txt' INTO P_DSN1.

            OPEN DATASET P_DSN1 FOR OUTPUT IN TEXT MODE.
            LOOP AT REG.
            TRANSFER REG-CAMPO TO P_DSN1.
            ENDLOOP.

            CLOSE DATASET P_DSN1.

            Observen que el campo ADIC-FILLER tiene espacios en blanco al final. Estos son los que quiero que me queden en el archivo plano. Los espacios en blanco que puedan llegar a existir entre los diferentes campos sí los esta conservando.

            Nuevamente muchas gracias

            Comentario

            • karinastolen
              Member
              • mar
              • 60

              #7
              usa RESPECTING BLANKS

              Yo tenía un problema similar y lo solucioné como menciona miguelonibus sólo que utilicé el CONCATENATE con la opción RESPECTING BLANKS.
              "Experience is what you get when you didn't get what you wanted." Randy Pausch

              Comentario

              • luis999
                Member
                • jun
                • 82

                #8
                Quiza te sirve lo siquiente:

                TYPES: text3 TYPE c LENGTH 101.

                DATA: T_CONT TYPE TABLE OF text3.
                DATA: BEGIN OF IT_CONT OCCURS 0,
                DATO(101) TYPE C.
                DATA: END OF IT_CONT.

                DATA: BEGIN OF IT_EXPORT OCCURS 0,
                DATO TYPE STRING.
                DATA: END OF IT_EXPORT.


                .................
                llenas los datos
                .................
                IT_CONT-DATO+18(15) = VL_WRBTRT.
                *Cantidad de registros de beneficiarios
                IT_CONT-DATO+33(15) = '000000000000000'.
                *Cantidad de registros enviados
                IT_CONT-DATO+48(15) = LINEASTC.


                APPEND IT_CONT-DATO TO T_CONT.
                concatenate LINES OF T_CONT into IT_EXPORT-dato respecting blanks.

                APPEND IT_EXPORT.
                CLEAR IT_EXPORT.

                CALL FUNCTION 'GUI_DOWNLOAD'
                EXPORTING
                filename = l_filename
                filetype = 'ASC'
                * trunc_trailing_blanks = ' '
                trunc_trailing_blanks_eol = ' ' "Deja los espacios en blanco
                TABLES
                data_tab = IT_EXPORT.

                Comentario

                Trabajando...