@JonathanDemons_123, la "función substring" en Cobol es nativa, forma parte de la sintaxis del lenguaje. Es decir, en cualquier variable alfanumérica puedes extraer un substring de la manera que lo haces en la línea 41 de tu código:
variable(posición:longitud)
Ahora, si tienes una estructura en la que lees tu fichero, no hace falta substring porque te lo hace la "máscara" que se aplica con tu estructura:
Código COBOL:
WORKING-STORAGE SECTION.
01 FDR3.
05 WS-STUDENT-ID PIC 9(15).
05 WS-NAME PIC A(55).
01 FIN PIC A(1).
01 mi-fichero.
05 nombre pic x(20).
05 direccion pic x(20).
******************************************************************
PROCEDURE DIVISION.
******************************************************************
OPEN INPUT RTRES.
PERFORM UNTIL FIN='Y'
READ RTRES INTO mi-fichero
AT END
MOVE 'Y' TO FIN
NOT AT END
DISPLAY "Nombre : " nombre
DISPLAY "Direccion: " direccion
END-READ
END-PERFORM
Un consejo: no pongas puntos después de las sentencias. El único punto obligatorio en PROCEDURE es el punto final (en tu código, después del STOP RUN).