feat(charka): E/S de ficheros — SELECT/FD/OPEN/READ/WRITE/CLOSE
El gran hueco que faltaba para el COBOL real: el procesamiento de ficheros secuenciales. Una rebanada vertical por los seis crates. - charka-parser: la ENVIRONMENT division ya no se ignora — se parsea FILE-CONTROL (SELECT name ASSIGN TO "ruta"); del FILE SECTION se asocia cada FD con su registro 01. Program::files. - charka-runtime: tipo CobFile — un fichero «line sequential» (cada registro una línea). Lectura: carga a memoria. Escritura: acumula y vuelca al cerrar. - charka-ir: Ir::files y los statements Open/Close/Read/Write. READ lleva sus bloques AT END / NOT AT END. - charka-codegen: un campo CobFile por fichero en el struct Program; los verbos emiten llamadas al runtime. - charka-shadow: el intérprete hace E/S de ficheros real. - Corpus: programa nuevo 18-fichero — escribe tres líneas, las relee con READ ... AT END y las muestra. Verificado: el intérprete sombra y el crate compilado por scaffold dan la misma salida. Alcance v1: organización line sequential; sin ficheros indexados ni relativos, sin FILE STATUS. Tests: charka-parser 17, charka-runtime 19, charka-ir 30, charka-codegen 25, charka-shadow 23. fmt + clippy limpios. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
* corpus charka — nivel 7: E/S de ficheros (escribir y releer)
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. FICHERO.
|
||||
ENVIRONMENT DIVISION.
|
||||
INPUT-OUTPUT SECTION.
|
||||
FILE-CONTROL.
|
||||
SELECT DATOS ASSIGN TO '/tmp/charka-corpus-18.dat'
|
||||
ORGANIZATION IS LINE SEQUENTIAL.
|
||||
DATA DIVISION.
|
||||
FILE SECTION.
|
||||
FD DATOS.
|
||||
01 REGISTRO PIC X(20).
|
||||
WORKING-STORAGE SECTION.
|
||||
01 WS-FIN PIC X VALUE 'N'.
|
||||
88 FIN-DATOS VALUE 'S'.
|
||||
01 WS-CONT PIC 9(3) VALUE 0.
|
||||
PROCEDURE DIVISION.
|
||||
MAIN.
|
||||
OPEN OUTPUT DATOS.
|
||||
WRITE REGISTRO FROM 'PRIMERA LINEA'.
|
||||
WRITE REGISTRO FROM 'SEGUNDA LINEA'.
|
||||
WRITE REGISTRO FROM 'TERCERA LINEA'.
|
||||
CLOSE DATOS.
|
||||
OPEN INPUT DATOS.
|
||||
PERFORM UNTIL FIN-DATOS
|
||||
READ DATOS
|
||||
AT END SET FIN-DATOS TO TRUE
|
||||
NOT AT END
|
||||
ADD 1 TO WS-CONT
|
||||
DISPLAY REGISTRO
|
||||
END-READ
|
||||
END-PERFORM.
|
||||
CLOSE DATOS.
|
||||
DISPLAY 'LINEAS LEIDAS = ' WS-CONT.
|
||||
STOP RUN.
|
||||
@@ -0,0 +1,4 @@
|
||||
PRIMERA LINEA
|
||||
SEGUNDA LINEA
|
||||
TERCERA LINEA
|
||||
LINEAS LEIDAS = 003
|
||||
@@ -26,6 +26,7 @@ salida correcta, una línea por `DISPLAY`.
|
||||
| `15-resetear` | 6 | `INITIALIZE` — resetear datos y grupos |
|
||||
| `16-bandera` | 5 | `SET` de nombres de condición (nivel 88) a `TRUE` |
|
||||
| `17-rangopar` | 5 | `PERFORM ... THRU` — un rango de párrafos |
|
||||
| `18-fichero` | 7 | E/S de ficheros: `SELECT`/`FD`/`OPEN`/`READ`/`WRITE`|
|
||||
|
||||
## Formato
|
||||
|
||||
|
||||
Reference in New Issue
Block a user