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:
IDENTIFICATION DIVISION.
PROGRAM-ID. TRASPASO.
*
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OPTIONAL RENT-FILE
ASSIGN TO "alquiler.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS STRE.
*
SELECT OPTIONAL VENTAS-FILE
ASSIGN TO "ventas.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS STVE.
*
SELECT OPTIONAL DESTINO
ASSIGN TO "Destino.txt"
ORGANIZATION IS LINE SEQUENTIAL
FILE STATUS IS STDE.
*
DATA DIVISION.
FILE SECTION.
FD RENT-FILE.
01 RENT-RECORD.
03 ITEM-NO PIC 9(03).
03 VIDEO-NAME PIC X(20).
03 TAPES-IN-STOCK PIC 9(03).
*
FD VENTAS-FILE.
01 VENTAS-RECORD.
03 ITEM-NO-V PIC 9(03).
03 VIDEO-NAME-V PIC X(20).
03 TAPES-FOR-SALE PIC 9(03).
*
FD DESTINO.
01 DESTINO-RECORD.
03 ITEM-NO-D PIC 9(03).
03 VIDEO-NAME-D PIC X(20).
03 STOCK-D PIC 9(03).
03 SALE-D PIC 9(03).
*
WORKING-STORAGE SECTION.
77 STRE PIC XX.
77 STVE PIC XX.
77 STDE PIC XX.
01 CONTA PIC 9(04) COMP-5.
01 CONTA-EDI PIC ZZZ9.
01 TECLA PIC X(01).
01 ERR.
03 PIC X(37) VALUE
"Error fichero 'Destino.txt' status: ".
03 ERRO PIC XX.
03 PIC X(02) VALUE ".".
01 ERR1.
03 PIC X(14) VALUE
"El registro ".
03 ERRO1 PIC ZZ9.
03 PIC X(38) VALUE
", no existe en el fichero de ventas. ".
*
PROCEDURE DIVISION.
DECLARATIVES.
DECLA-DESTINO SECTION.
USE AFTER STANDAR ERROR PROCEDURE ON DESTINO.
DESTINO-DECLA.
IF STDE = "35" OR STDE = "30"
OPEN OUTPUT DESTINO
CLOSE DESTINO
OPEN EXTEND DESTINO
ELSE
MOVE STDE TO ERRO
DISPLAY ERR
ACCEPT TECLA
CLOSE RENT-FILE
VENTAS-FILE
STOP RUN
END-IF.
END DECLARATIVES.
*
UNICA SECTION.
ABRIR.
OPEN INPUT
RENT-FILE
VENTAS-FILE
OPEN EXTEND
DESTINO.
INICIO.
DISPLAY "Pulse una tecla para iniciar ... "
ACCEPT TECLA WITH NO ADVANCING.
INITIALIZE CONTA CONTA-EDI.
*
PROCESAR.
PERFORM WITH NO LIMIT
READ RENT-FILE
NEXT RECORD
AT END
EXIT PERFORM
NOT AT END
MOVE ITEM-NO TO ITEM-NO-V ITEM-NO-D
READ VENTAS-FILE
INVALID KEY
MOVE ITEM-NO TO ERRO1
DISPLAY ERR1
ACCEPT TECLA WITH NO ADVANCING
NOT INVALID KEY
MOVE TAPES-FOR-SALE TO SALE-D
END-READ
MOVE VIDEO-NAME TO VIDEO-NAME-D
MOVE TAPES-IN-STOCK TO STOCK-D
WRITE DESTINO-RECORD
ADD 1 TO CONTA
END-READ
END-PERFORM.
*
FIN.
MOVE CONTA TO CONTA-EDI.
*
CLOSE RENT-FILE
VENTAS-FILE
DESTINO.
*
DISPLAY "Fin del proceso, se han creado " WITH NO ADVANCING
DISPLAY CONTA-EDI WITH NO ADVANCING
DISPLAY ", pulse una tecla para terminar ... "
WITH NO ADVANCING.
ACCEPT TECLA WITH NO ADVANCING.
STOP RUN.
*
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.-