Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol COBOL - General
COBOL - General Discusiones de temática general sobre el lenguaje COBOL y todo lo relacionado con él.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Compilador] No puedo leer archivos. dariodr COBOL - General 4 10 de marzo de 2023 10:23
[Duda] Leer archivos COBOL dariodr COBOL - General 1 10 de febrero de 2023 12:04
[Duda] Leer archivos RM Cobol desde PowerCobol Roger PowerCOBOL (ActiveX, v4 - v11) 11 23 de marzo de 2020 14:01
[Duda] Crear nuevo proceso Nitzer PowerCOBOL (ActiveX, v4 - v11) 1 8 de junio de 2016 16:53
[Duda] Leer y llenar archivos PDF lfortuny PowerCOBOL (ActiveX, v4 - v11) 12 24 de abril de 2016 19:36

Respuesta

  #1
Antiguo 16 de diciembre de 2023, 12:18
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11
Sonido Leer dos archivos y crear uno nuevo.
0 Inactivo Inactivo

Buenas tengo este enunciado:
[ATTACH=CONFIG]950[/ATTACH]

El archivo principal es este. Crea dos archivos.

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. video-rent.
  3.      *
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            SELECT rent-file ASSIGN to "alquiler.txt"
  8.               ORGANIZATION IS LINE SEQUENTIAL.
  9.            SELECT ventas-file ASSIGN to "ventas.txt"
  10.               ORGANIZATION IS LINE SEQUENTIAL.
  11.      *
  12.        DATA DIVISION.
  13.        FILE SECTION.
  14.        FD  rent-file.
  15.        01  rent-record.
  16.            03 item-no         PIC 9(3).
  17.            03 video-name      PIC x(20).
  18.            03 tapes-in-stock  PIC 9(3).
  19.      *
  20.        FD ventas-file.
  21.        01  ventas-record.
  22.            03 item-no-v       PIC 9(3).
  23.            03 video-name-v    PIC x(20).
  24.            03 tapes-for-sale  PIC 9(3).
  25.      *    
  26.        WORKING-STORAGE SECTION.
  27.        77  mas-datos  PIC X VALUE SPACES.  
  28.      *
  29.        PROCEDURE DIVISION.
  30.        MAIN-PROCEDURE.
  31.            PERFORM abrir-archivo.
  32.            PERFORM ingreso-datos until mas-datos = 'n' OR 'N'.
  33.            PERFORM cerrar-archivo.
  34.            STOP RUN.
  35.      *
  36.        abrir-archivo.
  37.            OPEN OUTPUT rent-file
  38.                 OUTPUT ventas-file.
  39.      *
  40.        ingreso-datos.
  41.            DISPLAY 'Item Nro: ' NO ADVANCING.
  42.            ACCEPT item-no.
  43.            DISPLAY 'Nombre del Video: ' NO ADVANCING.
  44.            ACCEPT video-name.
  45.            DISPLAY 'Cintas en stock: ' NO ADVANCING.
  46.            ACCEPT tapes-in-stock.
  47.            WRITE rent-record.
  48.            MOVE item-no TO item-no-v.
  49.            MOVE video-name TO video-name-v.
  50.            Display 'Cintas para vender: ' NO ADVANCING.
  51.            ACCEPT tapes-for-sale.
  52.            WRITE ventas-record.
  53.            DISPLAY 'Agregar otro video s/n: ' NO ADVANCING.
  54.            ACCEPT mas-datos.
  55.      *
  56.        cerrar-archivo.
  57.            close rent-file
  58.                  ventas-file.  

Y el archivo que crea uno nuevo es este:

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. master.
  3.      *
  4.        ENVIRONMENT DIVISION.
  5.        INPUT-OUTPUT SECTION.
  6.        FILE-CONTROL.
  7.            SELECT master-file ASSIGN TO "master.txt"
  8.               ORGANIZATION IS LINE SEQUENTIAL.
  9.            SELECT rent-file   ASSIGN to "alquiler.txt"
  10.               ORGANIZATION IS LINE SEQUENTIAL.
  11.            SELECT ventas-file ASSIGN to "ventas.txt"
  12.               ORGANIZATION IS LINE SEQUENTIAL.
  13.      *
  14.        DATA DIVISION.
  15.        FILE SECTION.
  16.        FD  master-file.
  17.        01  master-rec.
  18.            03 item-no-m       PIC 9(3).
  19.            03 video-name-m    PIC x(20).
  20.            03 cintas-stock-m  PIC 9(3).
  21.            03 cintas-ventas-m PIC 9(3).
  22.      *    
  23.        FD  rent-file.
  24.        01  rent-record.
  25.            03 item-no         PIC 9(3).
  26.            03 video-name      PIC x(20).
  27.            03 tapes-in-stock  PIC 9(3).
  28.      *
  29.        FD ventas-file.
  30.        01  ventas-record.
  31.            03 item-no-v       PIC 9(3).
  32.            03 video-name-v    PIC x(20).
  33.            03 tapes-for-sale  PIC 9(3).
  34.      *    
  35.        WORKING-STORAGE SECTION.
  36.        77  fin-archivo  PIC X VALUE SPACES.  
  37.      *
  38.        PROCEDURE DIVISION.
  39.        MAIN-PROCEDURE.
  40.            PERFORM abrir-archivo.
  41.            PERFORM proceso.
  42.            PERFORM cerrar-archivo.
  43.            STOP RUN.
  44.      *
  45.        abrir-archivo.
  46.            OPEN OUTPUT master-file
  47.                 INPUT rent-file
  48.                 INPUT ventas-file.
  49.      *
  50.        proceso.
  51.            PERFORM leer-fichero-rentas until fin-archivo = 's'.
  52.            PERFORM lee-fichero-ventas until fin-archivo = 's'.
  53.      *     PERFORM escribir-master.  
  54.      *
  55.        leer-fichero-rentas.
  56.            read rent-file
  57.               at end move 's' to fin-archivo
  58.               not at end perform proceso1
  59.             end-read.
  60.      *
  61.        lee-fichero-ventas.
  62.            read ventas-file
  63.               at end move 's' to fin-archivo
  64.               not at end perform proceso2
  65.            end-read.
  66.  
  67.        cerrar-archivo.
  68.            close master-file
  69.                  rent-file
  70.                  ventas-file.
  71.  
  72.        proceso1.
  73.            move item-no        to item-no-m.
  74.            move video-name     to video-name-m.
  75.            move tapes-in-stock to cintas-stock-m.
  76.            write master-rec.
  77.  
  78.        proceso2.
  79.            move tapes-for-sale to cintas-ventas-m.
  80.            write master-rec.
  81.      *
  82.        

Como leo dos archivos a la vez y grabo los datos en uno solo.
Saludos.

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  Captura de pantalla de 2023-12-16 18-10-37.png
Vistas: 57
Tamaño:  100,3 KB  
dariodr is offline   Responder Con Cita
  #2
Antiguo 16 de diciembre de 2023, 12:35
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Hola @dariodr,

Lo primero, no abras los archivos en OUTPUT, porque eso se hace sólo una vez al principio, para crear el archivo vacío, pero si lo haces todas las veces, va a borrar el archivo y a crearlo de nuevo cada vez que ejecutes el programa, (y si quieres evitar el OUTPUT, cambia la cláusula SELECT nombre_de archivo por SELECT OPTIONAL nombre_de_archivo o por unas DECLARATIVES, lo que te sea más cómodo), lo segundo es, ¿qué es lo que quieres exactamente?, ¿que te hagamos un ejemplo, una ayuda porque te atascas en algún sitio, ...? danos alguna pista más.

Un salu2.-
Josber is offline   Responder Con Cita
  #3
Antiguo 17 de diciembre de 2023, 02:12
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11

La idea es esta, Tengo 2 archivos de texto:

El primer archivo tiene estos campos:
Código:
Item No
Video Name
Tapes in stock
El segundo archivo tiene estos campos:
Código:
Item No
Video Name
Tapes for sale
Nota: en los dos archivos el No de Item y el Video Name son los mismos.

Lo que quiero hacer:
Crear un nuevo archivo donde se guarde:
Código:
Item No
Video Name
Tapes in stock
Tapes for sale.
Espero se entienda. Salu2.
dariodr is offline   Responder Con Cita
  #4
Antiguo 18 de diciembre de 2023, 11:07
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

@dariodr, lo que quieres es que te pongamos el código fuente para hacer lo que pides, ¿no?

un salu2.-
Josber is offline   Responder Con Cita
  #5
Antiguo 18 de diciembre de 2023, 12:02
dariodr
Forero
Última Actividad 20.09.2026 10:04
Posts Posts: 57
Likes enviados Enviados: 17
Likes recibidos Recibidos: 11

Si, exacto. Quiero compararlo con el que tengo.
Salu2.
dariodr is offline   Responder Con Cita
  #6
Antiguo 19 de diciembre de 2023, 11:46
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Bueno pues, sin probarlo, porque no tengo los ficheros de datos ni compilador para MS-DOS, con algo así a lo que te pongo, debería de funcionar.

Código COBOL:
  1.  
  2.        IDENTIFICATION DIVISION.
  3.        PROGRAM-ID. TRASPASO.
  4.      *
  5.        ENVIRONMENT DIVISION.
  6.        INPUT-OUTPUT SECTION.
  7.        FILE-CONTROL.
  8.             SELECT OPTIONAL RENT-FILE
  9.                    ASSIGN TO "alquiler.txt"
  10.                    ORGANIZATION IS LINE SEQUENTIAL
  11.                    FILE STATUS IS STRE.
  12.      *
  13.             SELECT OPTIONAL VENTAS-FILE
  14.                    ASSIGN TO "ventas.txt"
  15.                    ORGANIZATION IS LINE SEQUENTIAL
  16.                    FILE STATUS IS STVE.
  17.      *
  18.             SELECT OPTIONAL DESTINO
  19.                    ASSIGN TO "Destino.txt"
  20.                    ORGANIZATION IS LINE SEQUENTIAL
  21.                    FILE STATUS IS STDE.
  22.      *
  23.        DATA DIVISION.
  24.        FILE SECTION.
  25.        FD  RENT-FILE.
  26.        01  RENT-RECORD.
  27.            03  ITEM-NO                  PIC 9(03).
  28.            03  VIDEO-NAME               PIC X(20).
  29.            03  TAPES-IN-STOCK           PIC 9(03).
  30.      *
  31.        FD  VENTAS-FILE.
  32.        01  VENTAS-RECORD.
  33.            03  ITEM-NO-V                PIC 9(03).
  34.            03  VIDEO-NAME-V             PIC X(20).
  35.            03  TAPES-FOR-SALE           PIC 9(03).
  36.      *
  37.        FD  DESTINO.
  38.        01  DESTINO-RECORD.
  39.            03  ITEM-NO-D                PIC 9(03).
  40.            03  VIDEO-NAME-D             PIC X(20).
  41.            03  STOCK-D                  PIC 9(03).
  42.            03  SALE-D                   PIC 9(03).
  43.      *
  44.        WORKING-STORAGE SECTION.
  45.        77  STRE                         PIC XX.
  46.        77  STVE                         PIC XX.
  47.        77  STDE                         PIC XX.
  48.  
  49.        01  CONTA                        PIC 9(04) COMP-5.
  50.        01  CONTA-EDI                    PIC ZZZ9.
  51.        01  TECLA                        PIC X(01).
  52.        01  ERR.
  53.            03                           PIC X(37) VALUE
  54.                             "Error fichero 'Destino.txt' status: ".
  55.            03  ERRO                     PIC XX.
  56.            03                           PIC X(02) VALUE ".".
  57.        01  ERR1.
  58.            03                           PIC X(14) VALUE
  59.                             "El registro  ".
  60.            03  ERRO1                    PIC ZZ9.
  61.            03                           PIC X(38) VALUE
  62.                             ", no existe en el fichero de ventas. ".
  63.      *
  64.        PROCEDURE DIVISION.
  65.        DECLARATIVES.
  66.        DECLA-DESTINO SECTION.
  67.             USE AFTER STANDAR ERROR PROCEDURE ON DESTINO.
  68.        DESTINO-DECLA.
  69.             IF STDE = "35" OR STDE = "30"
  70.                OPEN OUTPUT DESTINO
  71.                CLOSE DESTINO
  72.                OPEN EXTEND DESTINO
  73.             ELSE
  74.                MOVE STDE TO ERRO
  75.                DISPLAY ERR
  76.                ACCEPT TECLA
  77.                CLOSE RENT-FILE
  78.                      VENTAS-FILE
  79.                STOP RUN
  80.             END-IF.
  81.        END DECLARATIVES.
  82.      *
  83.        UNICA SECTION.
  84.        ABRIR.
  85.             OPEN INPUT
  86.                  RENT-FILE
  87.                  VENTAS-FILE
  88.             OPEN EXTEND
  89.                  DESTINO.
  90.        INICIO.
  91.             DISPLAY "Pulse una tecla para iniciar ... "
  92.             ACCEPT TECLA WITH NO ADVANCING.
  93.             INITIALIZE CONTA CONTA-EDI.
  94.      *
  95.        PROCESAR.
  96.             PERFORM WITH NO LIMIT
  97.                     READ RENT-FILE
  98.                          NEXT RECORD
  99.                               AT END
  100.                                  EXIT PERFORM
  101.                               NOT AT END
  102.                                   MOVE ITEM-NO TO ITEM-NO-V ITEM-NO-D
  103.                                   READ VENTAS-FILE
  104.                                        INVALID KEY
  105.                                                MOVE ITEM-NO TO ERRO1
  106.                                                DISPLAY ERR1
  107.                                                ACCEPT TECLA WITH NO ADVANCING
  108.                                        NOT INVALID KEY
  109.                                            MOVE TAPES-FOR-SALE TO SALE-D
  110.                                   END-READ
  111.                                   MOVE VIDEO-NAME TO VIDEO-NAME-D
  112.                                   MOVE TAPES-IN-STOCK TO STOCK-D
  113.                                   WRITE DESTINO-RECORD
  114.                                   ADD 1 TO CONTA
  115.                     END-READ
  116.             END-PERFORM.
  117.      *
  118.         FIN.
  119.             MOVE CONTA TO CONTA-EDI.
  120.      *
  121.             CLOSE RENT-FILE
  122.                   VENTAS-FILE
  123.                   DESTINO.
  124.      *
  125.             DISPLAY "Fin del proceso, se han creado " WITH NO ADVANCING
  126.             DISPLAY CONTA-EDI                         WITH NO ADVANCING
  127.             DISPLAY ", pulse una tecla para terminar ... "
  128.                                                       WITH NO ADVANCING.
  129.             ACCEPT TECLA                              WITH NO ADVANCING.
  130.             STOP RUN.
  131.      *
  132.             END PROGRAM TRASPASO.

No sé que compilador vas a usar, por lo que igual la sentencia PERFORM WITH NO LIMIT, igual no la tiene tu compilador, pero eso se soluciona rápidamente con un sencillo PERFORM a un PROCEDIMIENTO (o ETIQUETA, como lo llames)

Ya nos dirás, si te funciona, si hay algo que no entiendas, pregunta, que estamos para eso.

Un salu2.-
Josber is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:51.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.