Well, it's a guess, as you have not provided much, but if "LOGFILE.txt" does not exist, you will need OPTIONAL on your SELECT.
Suggest you put FILE STATUS checking in your code.
题
I'm trying to write a subprogram in COBOL to make a logfile called from my main program. I don't want the logfile is cleared every time I call the subprogram so I use 'open extend'. The problem is because of an unknown reason it won't work, the program does nothing. When i change 'open extend' into 'open output' it works but I don't want the file is overwritten every time.
IDENTIFICATION DIVISION.
PROGRAM-ID. LOGGER.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT LOGFILE ASSIGN TO "LOGFILE.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD LOGFILE.
copy "FDLOGGER.cpy".
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 LOGFILEBOODSCHAP PIC X(150) value spaces.
Procedure division USING LOGFILEBOODSCHAP.
pgm.
open EXTEND LOGFILE
Move Current-time to TIJD
Move Current-date to DATUM
Move LOGFILEBOODSCHAP to BOODSCHAP
write logrecord
close LOGFILE
exit program
.
解决方案
Well, it's a guess, as you have not provided much, but if "LOGFILE.txt" does not exist, you will need OPTIONAL on your SELECT.
Suggest you put FILE STATUS checking in your code.
其他提示
I know your question is very old here. But I was still having the same problem today and after a few hours I discover that GnuCOBOL 2.0 with OpenCobolIDE 4.7.6 that I am using generates error 35 when trying to use OPEN EXTEND. I solved it in a not very elegant way, but it works perfectly. I am sharing the solution I found.
IDENTIFICATION DIVISION.
PROGRAM-ID. CREATFIL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
FUNCTION ALL INTRINSIC.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FD-VIRTUAL ASSIGN TO "CADFILE.TXT"
ORGANIZATION IS LINE SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-GET-ERROR.
DATA DIVISION.
FILE SECTION.
FD FD-VIRTUAL.
01 FS-BOOK.
05 NOME PIC X(40).
WORKING-STORAGE SECTION.
77 WS-GET-ERROR PIC XX.
LOCAL-STORAGE SECTION.
01 TB-VIRTUAL.
05 TB-BOOK.
10 LS-NOME PIC X(40).
77 LS-ENTER PIC X.
77 WS-RESP PIC A VALUE "Y".
PROCEDURE DIVISION.
OPEN EXTEND FD-VIRTUAL.
IF WS-GET-ERROR = "35"
OPEN OUTPUT FD-VIRTUAL
END-IF
IF WS-GET-ERROR = "00"
PERFORM UNTIL UPPER-CASE(WS-RESP) NOT = "Y"
DISPLAY X"0D"
DISPLAY "Name: " WITH NO ADVANCING
ACCEPT LS-NOME
WRITE FS-BOOK FROM TB-BOOK
DISPLAY "More record (Y) for YES " WITH NO ADVANCING
DISPLAY "- any key for NOT: "
WITH NO ADVANCING
ACCEPT WS-RESP
IF UPPER-CASE(WS-RESP) NOT = "Y"
EXIT PERFORM
END-IF
END-PERFORM
END-IF.
CLOSE FD-VIRTUAL.
DISPLAY X"0D".
DISPLAY "Press <ENTER> to finish... " WITH NO ADVANCING.
ACCEPT LS-ENTER.
STOP RUN.
END PROGRAM CREATFIL.
Observe the instruction
OPEN EXTEND FD-VIRTUAL.
IF WS-GET-ERROR = "35"
OPEN OUTPUT FD-VIRTUAL
END-IF