COBOL - Verbos de manejo de archivos
Los verbos de manejo de archivos se utilizan para realizar varias operaciones en archivos. A continuación se muestran los verbos de manejo de archivos:
- Open
- Read
- Write
- Rewrite
- Delete
- Start
- Close
Verbo abierto
Abrir es la primera operación de archivo que se debe realizar. Si Abrir tiene éxito, solo se pueden realizar más operaciones en un archivo. Solo después de abrir un archivo, las variables de la estructura del archivo están disponibles para su procesamiento.FILE STATUS La variable se actualiza después de cada operación de archivo.
Sintaxis
OPEN "mode" file-name.
Aquí, file-name es una cadena literal, que usará para nombrar su archivo. Un archivo se puede abrir en los siguientes modos:
No Señor. | Modo y descripción |
---|---|
1 |
Input El modo de entrada se utiliza para archivos existentes. En este modo, solo podemos leer el archivo, no se permiten otras operaciones en el archivo. |
2 |
Output El modo de salida se utiliza para insertar registros en archivos. Si unsequential filese utiliza y el archivo contiene algunos registros, entonces los registros existentes se eliminarán primero y luego se insertarán nuevos registros en el archivo. No sucederá así en caso deindexed file o un relative file. |
3 |
Extend El modo extendido se usa para agregar registros en un sequential file. En este modo, los registros se insertan al final. Si el modo de acceso a archivos esRandom o Dynamic, entonces no se puede utilizar el modo extendido. |
4 |
I-O El modo Entrada-Salida se utiliza para leer y reescribir los registros de un archivo. |
Leer Verbo
Leer verbo se utiliza para leer los registros del archivo. La función de lectura es buscar registros de un archivo. En cada verbo leído, solo se puede leer un registro en la estructura del archivo. Para realizar una operación de lectura, abra el archivo en modo INPUT o IO. En cada instrucción de lectura, el puntero de archivo se incrementa y, por lo tanto, se leen los registros sucesivos.
Sintaxis
A continuación se muestra la sintaxis para leer los registros cuando el modo de acceso a archivos es secuencial:
READ file-name NEXT RECORD INTO ws-file-structure
AT END DISPLAY 'End of File'
NOT AT END DISPLAY 'Record Details:' ws-file-structure
END-READ.
A continuación se muestran los parámetros utilizados:
NEXT RECORD es opcional y se especifica cuando un archivo secuencial indexado se lee de forma secuencial.
La cláusula INTO es opcional. ws-file-structure se define en la sección WorkingStorage para obtener los valores de la instrucción READ.
La condición AT END se convierte en True cuando se alcanza el final del archivo.
Example- El siguiente ejemplo lee un archivo existente usando una organización secuencial de líneas. Este programa se puede compilar y ejecutar utilizandoLive Demo opción donde mostrará todos los registros presentes en el archivo.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO 'input.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
01 WS-EOF PIC A(1).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
PERFORM UNTIL WS-EOF='Y'
READ STUDENT INTO WS-STUDENT
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-STUDENT
END-READ
END-PERFORM.
CLOSE STUDENT.
STOP RUN.
Suponga que los datos del archivo de entrada disponibles en el input.txt el archivo contiene lo siguiente:
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan
Sintaxis
A continuación se muestra la sintaxis para escribir un registro cuando el modo de acceso al archivo es aleatorio:
READ file-name RECORD INTO ws-file-structure
KEY IS rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure
END-READ.
Example- El siguiente ejemplo lee un archivo existente usando una organización indexada. Este programa se puede compilar y ejecutar utilizandoJCLen Mainframes donde mostrará todos los registros presentes en el archivo. En el servidor Mainframes, no utilizamos archivos de texto; en su lugar usamos archivos PS.
Supongamos que el archivo presente en Mainframes tiene el mismo contenido que el archivo input.txt en el ejemplo anterior.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO IN1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT.
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
PROCEDURE DIVISION.
OPEN INPUT STUDENT.
MOVE 20005 TO STUDENT-ID.
READ STUDENT RECORD INTO WS-STUDENT-FILE
KEY IS STUDENT-ID
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY WS-STUDENT-FILE
END-READ.
CLOSE STUDENT.
STOP RUN.
JCL para ejecutar el programa COBOL anterior -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
20005 Amitabh Bachhan
Escribir verbo
El verbo escribir se usa para insertar registros en un archivo. Una vez que se escribe el registro, ya no está disponible en el búfer de registro. Antes de insertar registros en el archivo, mueva los valores al búfer de registros y luego realice la escritura del verbo.
La declaración de escritura se puede utilizar con FROMopción para escribir registros directamente de las variables de almacenamiento de trabajo. From es una cláusula opcional. Si el modo de acceso es secuencial, para escribir un registro, el archivo debe abrirse en el modo de salida o extendido. Si el modo de acceso es aleatorio o dinámico, para escribir un registro, el archivo debe abrirse en modo Salida o modo IO.
Sintaxis
A continuación se muestra la sintaxis para leer un registro cuando la organización del archivo es secuencial:
WRITE record-buffer [FROM ws-file-structure]
END-WRITE.
A continuación se muestra la sintaxis para leer un registro cuando la organización del archivo está indexada o es relativa:
WRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.
Example - El siguiente ejemplo muestra cómo insertar un nuevo registro en un nuevo archivo cuando la organización es secuencial.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO OUT1
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(5).
05 NAME PIC A(25).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN EXTEND STUDENT.
MOVE 1000 TO STUDENT-ID.
MOVE 'Tim' TO NAME.
MOVE '10' TO CLASS.
WRITE STUDENT-FILE
END-WRITE.
CLOSE STUDENT.
STOP RUN.
JCL para ejecutar el programa COBOL anterior -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)
Cuando compile y ejecute el programa anterior, agregará un nuevo registro al archivo de salida.
1000 Tim 10
Reescribir el verbo
El verbo reescribir se utiliza para actualizar los registros. El archivo debe abrirse en modo IO para operaciones de reescritura. Solo se puede usar después de una operación de lectura exitosa. El verbo reescribir sobrescribe el último registro leído.
Sintaxis
A continuación se muestra la sintaxis para leer un registro cuando la organización del archivo es secuencial:
REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.
A continuación se muestra la sintaxis para leer un registro cuando la organización del archivo está indexada o es relativa:
REWRITE record-buffer [FROM ws-file-structure]
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.
Example - El siguiente ejemplo muestra cómo actualizar un registro existente que hemos insertado en el paso anterior de Escritura -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO IN1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(4).
05 NAME PIC A(12).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN I-O STUDENT.
MOVE '1000' TO STUDENT-ID.
READ STUDENT
KEY IS STUDENT-ID
INVALID KEY DISPLAY ‘KEY IS NOT EXISTING’
END-READ.
MOVE 'Tim Dumais' TO NAME.
REWRITE STUDENT-FILE
END-REWRITE.
CLOSE STUDENT.
STOP RUN.
JCL para ejecutar el programa COBOL anterior -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Cuando compile y ejecute el programa anterior, actualizará el registro:
1000 Tim Dumais 10
Eliminar verbo
Eliminar verbo solo se puede realizar en archivos indexados y relativos. El archivo debe abrirse en modo IO. En la organización de archivos secuenciales, los registros no se pueden eliminar. El último registro leído por la instrucción de lectura se elimina en el caso del modo de acceso secuencial. En el modo de acceso aleatorio, especifique la clave de registro y luego realice la operación Eliminar.
Sintaxis
A continuación se muestra la sintaxis para eliminar un registro:
DELETE file-name RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
Example - para eliminar un registro existente -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT STUDENT ASSIGN TO OUT1
ORGANIZATION IS INDEXED
ACCESS IS RANDOM
RECORD KEY IS STUDENT-ID
FILE STATUS IS FS.
DATA DIVISION.
FILE SECTION.
FD STUDENT
01 STUDENT-FILE.
05 STUDENT-ID PIC 9(4).
05 NAME PIC A(12).
05 CLASS PIC X(3).
WORKING-STORAGE SECTION.
01 WS-STUDENT.
05 WS-STUDENT-ID PIC 9(5).
05 WS-NAME PIC A(25).
05 WS-CLASS PIC X(3).
PROCEDURE DIVISION.
OPEN I-O STUDENT.
MOVE '1000' TO STUDENT-ID.
DELETE STUDENT RECORD
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.
CLOSE STUDENT.
STOP RUN.
JCL para ejecutar el programa COBOL anterior -
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
Cuando compila y ejecuta el programa anterior, produce el siguiente resultado:
Record Deleted
Verbo de inicio
El verbo de inicio solo se puede ejecutar en archivos indexados y relativos. Se utiliza para colocar el puntero del archivo en un registro específico. El modo de acceso debe ser secuencial o dinámico. El archivo debe abrirse en modo IO o Input.
Sintaxis
A continuación se muestra la sintaxis para colocar el puntero en un registro específico:
START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
INVALID KEY DISPLAY 'Invalid Key'
NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.
Cerrar Verbo
El verbo cerrar se usa para cerrar un archivo. Después de realizar la operación Cerrar, las variables en la estructura del archivo no estarán disponibles para su procesamiento. Se pierde el vínculo entre el programa y el archivo.
Sintaxis
A continuación se muestra la sintaxis para cerrar un archivo:
CLOSE file-name.