Files
sergio b3278bdb0c 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>
2026-05-21 22:47:26 +00:00

36 lines
929 B
COBOL

* 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.