Como NO sobreescribir un fichero

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • nachosds
    Member
    • dic
    • 48

    #1

    Como NO sobreescribir un fichero

    Muy buenas!

    Me gustaria saber si hay alguna orden para abrir in fichero en modo escritura pero de manera que no sobreescriba lo que habia ya antes.

    Esque, al poner el siguiente codigo, primero lo que hago es leer un fochero ya existente y cargar sus datos en los registros, y luego escribo en otro fichero. Pues bien, si ejecuto el programa 2 veces y cambio los datos del fichero de lectura (fic), luego al pasarlo al fichero de salida (fic2), éstos se me machacan.
    ¿Habria alguna forma de hacerlo para que no sobreescriba?

    El codigo en cuestion es este:


    REPORT Z_PFICHERO.

    ****************************
    * creamos variables *
    ****************************
    DATA: BEGIN OF REC,
    valor1(5) TYPE c,
    valor2(4) TYPE c,
    END OF REC.

    ****************************
    * abrimos fichero *
    * leemos y rellenamos REG *
    ****************************
    OPEN DATASET 'd:/fic.txt'.

    READ DATASET 'd:/fic.txt' INTO REC.
    IF SY-SUBRC = 8.
    WRITE:/ 'vamonos'.
    EXIT.
    ENDIF.
    WRITE:/ REC-valor1,REC-valor2.
    CLOSE DATASET 'd:/fic.txt'.


    ****************************
    * creamos fic2 salida *
    ****************************
    OPEN DATASET 'd:/fic2.txt'
    FOR OUTPUT
    IN TEXT MODE.
    ****************************
    * escribimos los valores *
    * de REG en el nuevo fic2 *
    ****************************
    TRANSFER REC TO 'd:/fic2.txt'.

    CLOSE DATASET 'd:/fic2.txt'.
    http://www.mnsystem.com/
  • robert_milan
    Senior Member
    • jun
    • 315

    #2
    Originalmente publicado por nachosds
    Muy buenas!

    Me gustaria saber si hay alguna orden para abrir in fichero en modo escritura pero de manera que no sobreescriba lo que habia ya antes.

    Esque, al poner el siguiente codigo, primero lo que hago es leer un fochero ya existente y cargar sus datos en los registros, y luego escribo en otro fichero. Pues bien, si ejecuto el programa 2 veces y cambio los datos del fichero de lectura (fic), luego al pasarlo al fichero de salida (fic2), éstos se me machacan.
    ¿Habria alguna forma de hacerlo para que no sobreescriba?

    El codigo en cuestion es este:


    REPORT Z_PFICHERO.

    ****************************
    * creamos variables *
    ****************************
    DATA: BEGIN OF REC,
    valor1(5) TYPE c,
    valor2(4) TYPE c,
    END OF REC.

    ****************************
    * abrimos fichero *
    * leemos y rellenamos REG *
    ****************************
    OPEN DATASET 'd:/fic.txt'.

    READ DATASET 'd:/fic.txt' INTO REC.
    IF SY-SUBRC = 8.
    WRITE:/ 'vamonos'.
    EXIT.
    ENDIF.
    WRITE:/ REC-valor1,REC-valor2.
    CLOSE DATASET 'd:/fic.txt'.


    ****************************
    * creamos fic2 salida *
    ****************************
    OPEN DATASET 'd:/fic2.txt'
    FOR OUTPUT
    IN TEXT MODE.
    ****************************
    * escribimos los valores *
    * de REG en el nuevo fic2 *
    ****************************
    TRANSFER REC TO 'd:/fic2.txt'.

    CLOSE DATASET 'd:/fic2.txt'.
    por que no creas el fichero 2 variable y le agregas la fecha y hora para que distingas los ficheros.

    lo puedes hacer con la instruccion concatenate.

    Saludos y espero te sirva.
    Un Huevon No Inútil


    Solo di lo que piensas, a la mejor tienes la mejor respuesta....

    Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

    Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

    Consultor FI jr/ABAP Sr.

    Comentario

    • nachosds
      Member
      • dic
      • 48

      #3
      Perdon por el sangrado de los asteriscos, pero no se como hacerlo bien...
      http://www.mnsystem.com/

      Comentario

      • robert_milan
        Senior Member
        • jun
        • 315

        #4
        facil:
        var1 (15) type c,
        var2 (15) type c.

        concatenate 'd:\fic2\' sy-date sy-uzeit '.txt into var1

        y en la instruccion OPEN DATASET VAR1

        TRANSFER REC TO var1

        CLOSE DATASET var1

        asi todo lo enviaras a un fichero fic2con fecha de procesamiento y hora de procesamiento por lo que nunca se sobreescribira.
        Un Huevon No Inútil


        Solo di lo que piensas, a la mejor tienes la mejor respuesta....

        Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

        Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

        Consultor FI jr/ABAP Sr.

        Comentario

        • Mauricio Hidalgo
          Senior Member
          • may
          • 481

          #5
          Si quieres agregar datos aun fichero sin perder lo que ya existe. Tienes que abrir el archivo con APPENDING.

          OPEN DATASET <dsn> FOR APPENDING.....

          Comentario

          • nachosds
            Member
            • dic
            • 48

            #6
            Originalmente publicado por Mauricio Hidalgo
            Si quieres agregar datos aun fichero sin perder lo que ya existe. Tienes que abrir el archivo con APPENDING.

            OPEN DATASET <dsn> FOR APPENDING.....
            Muchas gracias, eso del apending funciona perfecto!

            Otra preguntita...

            ¿Se podria hacer un menu para pedir datos por teclado, realice una accion y que vuelva al menu?

            Por ejemplo:

            Menu:
            1)Suma
            2)Resta

            Introduzca opcion: __
            http://www.mnsystem.com/

            Comentario

            • Bego86
              Junior Member
              • ene
              • 27

              #7
              hola alguien tiene ejercicios propuestos para poder practicar????

              GRACIAS

              Comentario

              • Mauricio Hidalgo
                Senior Member
                • may
                • 481

                #8
                Eso Lo Puedes Hacer Con Una Pantalla De Seleccion...seria Algo Así Como

                Program Ztest3.

                Parameters Suma Type C Radiobutton Group Radi.
                Parameters Resta Type C Radiobutton Group Radi.

                Start-of-selection.
                If Suma = 'x'.
                Perform Suma.
                Endif.

                If Resta = 'x'.
                Perform Resta.
                Endif.

                *---------------------------
                * R U T I N A S
                *---------------------------

                Form Suma.
                Endform.

                Form Resta.
                Endform.

                Comentario

                • nachosds
                  Member
                  • dic
                  • 48

                  #9
                  OK, pero lo malo que esto solo lo pide una vez... ¿Como se haria para que cuando terminara, te lo volviera a pedir?

                  Gracias!
                  http://www.mnsystem.com/

                  Comentario

                  • Bego86
                    Junior Member
                    • ene
                    • 27

                    #10
                    Mira intento obtener datos por teclado pero me gustaria q me preguntara mas de una vez.

                    yo por ejemplo pido dos numeros con
                    PARAMETERS y realizo una operacion pero quiero q me vuelva a pedir de nuevo otros numeros distintos para hacer otra sucesivamente hasta alguna condicion.

                    GRACIAS

                    Comentario

                    • robert_milan
                      Senior Member
                      • jun
                      • 315

                      #11
                      Acuerdate que abap es orientado a eventos, necesitas un evento para poder salirte de la impresion y regresar a la selection screen.

                      es mas facil que lo hagas por medio de un programa GUI O Modulpool
                      Un Huevon No Inútil


                      Solo di lo que piensas, a la mejor tienes la mejor respuesta....

                      Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

                      Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

                      Consultor FI jr/ABAP Sr.

                      Comentario

                      • Junior Member
                        • oct
                        • 4

                        #12
                        Re: Como NO sobreescribir un fichero

                        Hola, pues depende de lo que quieras hacer. Si no quieres salir de la pantalla , dándole solo a enter, una solución sería:

                        Parameters: P_uno type i,
                        p_dos type i,
                        p_result type i.

                        at SELECTION-SCREEN OUTPUT.

                        p_result = p_dos + P_uno.

                        if p_result = 20.
                        MESSAGE 'Resultado correcto' Type 'I'.
                        ENDIF.

                        Si por el contrario quieres ejecutar el programa podría volver a llamar al programa:

                        PARAMETERS: p_uno TYPE i,
                        p_dos TYPE i,
                        p_result TYPE i.


                        END-OF-SELECTION.
                        p_result = p_dos + p_uno.

                        IF p_result NE 10.

                        SUBMIT zmispruebas with p_uno EQ p_uno
                        with p_dos EQ p_dos
                        with p_result EQ p_result
                        VIA SELECTION-SCREEN.
                        ELSE.

                        WRITE ' Resultado correcto'.

                        ENDIF.

                        Espero haberte ayudado

                        Comentario

                        Trabajando...