Cobol - OUTREC en fichero VB

 
Vista:

OUTREC en fichero VB

Publicado por Alfonso (1 intervención) el 02/07/2009 13:04:29
A ver si alguien me puede ayudar.

Tengo un fichero variable de 12088 posiciones: DCB=(RECFM=VB,LRECL=12088

Quiero sacar un fichero mediante un OUTREC donde me pille las 19 primeras posiciones, luego meterle a capón los caracteres 'ABC' y luego el resto del fichero.

Tengo puesto:

OUTREC FIELDS=(5,19,C'ABC',27,12062)

Pero me falla con un abend U0218.

¿Alguna idea de lo que me está pasando?

Muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Resolver error U0218 al manipular registros en un archivo VB

Publicado por Alejandro (300 intervenciones) el 08/09/2023 22:51:31
El abend U0218 en COBOL indica un error de coincidencia de longitud de registro (Record Length Mismatch). Este error ocurre cuando la longitud del registro de salida no coincide con la longitud especificada en el LRECL (Record Length) del archivo de salida.

En tu caso, el problema parece estar en la definición del campo en el que estás insertando los caracteres 'ABC'. Aquí tienes una solución para lograr lo que deseas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// Definir el archivo de entrada y salida con sus DCB
// ...
 
// Definir el control del programa
WORKING-STORAGE SECTION.
01 WS-REGISTRO-IN              PIC X(12088).
01 WS-REGISTRO-OUT             PIC X(12088).
01 LONGITUD-REGISTRO           PIC 9(4) COMP.
 
// Definir el layout del archivo de entrada
01 CAMPO1-IN                    PIC X(19).
01 CAMPO2-IN                    PIC X(12069).
01 CAMPO3-IN                    PIC X(3).
 
// Definir el layout del archivo de salida
01 CAMPO1-OUT                   PIC X(19).
01 CAMPO2-OUT                   PIC X(3).
01 CAMPO3-OUT                   PIC X(12066).
 
// Definir el grupo para la manipulación de los campos
01 CAMPOS-GRUPO.
   05 CAMPO1                   PIC X(19).
   05 CAMPO2                   PIC X(3).
   05 CAMPO3                   PIC X(12066).
 
// Definir las áreas de trabajo
01 WS-WORK-AREA.
   05 WS-WS                       PIC X(12088).
   05 WS-ABC-TEXT                 PIC X(3) VALUE 'ABC'.
 
// Inicio del programa
PROCEDURE DIVISION.
 
    // Lectura del registro de entrada
    READ INPUT-FILE
        AT END
        MOVE 'Y' TO WS-END-OF-FILE
    END-READ.
 
    // Procesamiento de los registros
    PERFORM UNTIL WS-END-OF-FILE = 'Y'
 
        // Copiar las 19 primeras posiciones del registro de entrada
        MOVE CAMPO1-IN TO CAMPO1-OUT
 
        // Agregar 'ABC'
        MOVE WS-ABC-TEXT TO CAMPO2-OUT
 
        // Copiar el resto del registro de entrada
        MOVE CAMPO2-IN TO CAMPO3-OUT
 
        // Escribir el registro modificado en el archivo de salida
        WRITE OUTPUT-FILE FROM CAMPOS-GRUPO
 
        // Lectura del siguiente registro de entrada
        READ INPUT-FILE
            AT END
            MOVE 'Y' TO WS-END-OF-FILE
        END-READ
 
    END-PERFORM.
 
    // Cierre de archivos
    CLOSE INPUT-FILE
    CLOSE OUTPUT-FILE.
 
    // Fin del programa
    STOP RUN.

En este ejemplo, primero lees el registro de entrada completo en `WS-REGISTRO-IN`. Luego, divides ese registro en tres campos: `CAMPO1-IN`, `CAMPO2-IN` y `CAMPO3-IN`. A continuación, construyes el registro de salida combinando estos campos en `CAMPOS-GRUPO`. Agregas 'ABC' en `CAMPO2-OUT` y, finalmente, escribes el registro de salida en el archivo de salida. Este enfoque asegura que la longitud del registro de salida coincida con la longitud especificada en el LRECL del archivo de salida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar