Visual studio 2013 COBOL非法文件名

Visual studio 2013 COBOL非法文件名,visual-studio-2013,cobol,printers,Visual Studio 2013,Cobol,Printers,我的问题是打开的输出文件打印机行。程序没有运行,我得到非法文件名错误。如果我删除整行,它会运行,但在前进1之前,在WRITE PRINTER-RECORD中会产生错误。谢谢。您可以使用标准Windows符号名称之一,而不是COBOL关键字打印机: IDENTIFICATION DIVISION. PROGRAM-ID. HENSEM as "Test1.Program1". ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION.

我的问题是打开的输出文件打印机行。程序没有运行,我得到非法文件名错误。如果我删除整行,它会运行,但在前进1之前,在WRITE PRINTER-RECORD中会产生错误。谢谢。

您可以使用标准Windows符号名称之一,而不是COBOL关键字打印机:

       IDENTIFICATION DIVISION.
   PROGRAM-ID. HENSEM as "Test1.Program1".

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.

   SELECT CUSTOMER-FILE
           ASSIGN TO "CUSTOMER.DAT"
           ORGANIZATION IS SEQUENTIAL.

   SELECT PRINTER-FILE
           ASSIGN TO PRINTER
           ORGANIZATION IS LINE SEQUENTIAL.


   DATA DIVISION.
   FILE SECTION.

   FD CUSTOMER-FILE
       LABEL RECORDS ARE STANDARD.
      01 CUSTOMER-RECORD.
      05 CUSTOMER-NAME PIC X(30).
      05 CUSTOMER-PRODUCT PIC X(20).
      05 CUSTOMER-QUANTITY PIC 9(2).
      05 CUSTOMER-DATE PIC X(10).

   FD PRINTER-FILE
       LABEL RECORDS ARE OMITTED.
       01 PRINTER-RECORD PIC X(80).


   WORKING-STORAGE SECTION.

  *VARIABLES FOR SCREEN ENTRY
   01 Y-N PIC X.
   01 ENTRY-STATUS PIC X.


   PROCEDURE DIVISION.

   OPEN EXTEND CUSTOMER-FILE.
   OPEN OUTPUT PRINTER-FILE.
   MOVE "Y" TO Y-N.
   PERFORM ADD-RECORDS
       UNTIL Y-N = "N".
   PERFORM CLOSING-PROCEDURE.



       GOBACK.

  * OPENING AND CLOSING

   OPENING-PROCEDURE.


   CLOSING-PROCEDURE.
       CLOSE CUSTOMER-FILE.
       MOVE SPACE TO PRINTER-RECORD.
       WRITE PRINTER-RECORD BEFORE ADVANCING PAGE.
       CLOSE PRINTER-FILE.

   ADD-RECORDS.
       MOVE "N" TO ENTRY-STATUS.
       PERFORM GET-FIELDS
           UNTIL ENTRY-STATUS = "Y".
       PERFORM ADD-THIS-RECORD.
       PERFORM ANY-MORE.

   GET-FIELDS.
       MOVE SPACE TO CUSTOMER-RECORD.
       DISPLAY "ENTER CUSTOMER NAME: ".
       ACCEPT CUSTOMER-NAME.
       DISPLAY "ENTER WHAT DID THE CUSTOMER BOUGHT: ".
       ACCEPT CUSTOMER-PRODUCT.
       DISPLAY "ENTER HOW MUCH DID THE CUSTOMER BOUGHT: ".
       ACCEPT CUSTOMER-QUANTITY.
       DISPLAY "ENTER WHEN DID THE CUSTOMER BOUGHT: ".
       ACCEPT CUSTOMER-DATE.
       PERFORM VALIDATE-FIELDS.

   VALIDATE-FIELDS.
       MOVE "Y" TO ENTRY-STATUS.
       IF CUSTOMER-NAME = SPACE
           DISPLAY "CUSTOMER NAME MUST BE ENTERED"
       MOVE "N" TO ENTRY-STATUS.

   ADD-THIS-RECORD.
       MOVE CUSTOMER-RECORD TO PRINTER-RECORD.
       WRITE CUSTOMER-RECORD.
       WRITE PRINTER-RECORD BEFORE ADVANCING 1.

   ANY-MORE.
       DISPLAY "IS THERE ANY MORE INPUT?".
       ACCEPT Y-N.
       IF Y-N = "Y"
           MOVE "Y" TO Y-N.
       IF Y-N NOT = "Y"
           MOVE "N" TO Y-N.


   END PROGRAM HENSEM.
您可以使用标准Windows符号名之一,而不是COBOL关键字打印机:

       IDENTIFICATION DIVISION.
   PROGRAM-ID. HENSEM as "Test1.Program1".

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.

   SELECT CUSTOMER-FILE
           ASSIGN TO "CUSTOMER.DAT"
           ORGANIZATION IS SEQUENTIAL.

   SELECT PRINTER-FILE
           ASSIGN TO PRINTER
           ORGANIZATION IS LINE SEQUENTIAL.


   DATA DIVISION.
   FILE SECTION.

   FD CUSTOMER-FILE
       LABEL RECORDS ARE STANDARD.
      01 CUSTOMER-RECORD.
      05 CUSTOMER-NAME PIC X(30).
      05 CUSTOMER-PRODUCT PIC X(20).
      05 CUSTOMER-QUANTITY PIC 9(2).
      05 CUSTOMER-DATE PIC X(10).

   FD PRINTER-FILE
       LABEL RECORDS ARE OMITTED.
       01 PRINTER-RECORD PIC X(80).


   WORKING-STORAGE SECTION.

  *VARIABLES FOR SCREEN ENTRY
   01 Y-N PIC X.
   01 ENTRY-STATUS PIC X.


   PROCEDURE DIVISION.

   OPEN EXTEND CUSTOMER-FILE.
   OPEN OUTPUT PRINTER-FILE.
   MOVE "Y" TO Y-N.
   PERFORM ADD-RECORDS
       UNTIL Y-N = "N".
   PERFORM CLOSING-PROCEDURE.



       GOBACK.

  * OPENING AND CLOSING

   OPENING-PROCEDURE.


   CLOSING-PROCEDURE.
       CLOSE CUSTOMER-FILE.
       MOVE SPACE TO PRINTER-RECORD.
       WRITE PRINTER-RECORD BEFORE ADVANCING PAGE.
       CLOSE PRINTER-FILE.

   ADD-RECORDS.
       MOVE "N" TO ENTRY-STATUS.
       PERFORM GET-FIELDS
           UNTIL ENTRY-STATUS = "Y".
       PERFORM ADD-THIS-RECORD.
       PERFORM ANY-MORE.

   GET-FIELDS.
       MOVE SPACE TO CUSTOMER-RECORD.
       DISPLAY "ENTER CUSTOMER NAME: ".
       ACCEPT CUSTOMER-NAME.
       DISPLAY "ENTER WHAT DID THE CUSTOMER BOUGHT: ".
       ACCEPT CUSTOMER-PRODUCT.
       DISPLAY "ENTER HOW MUCH DID THE CUSTOMER BOUGHT: ".
       ACCEPT CUSTOMER-QUANTITY.
       DISPLAY "ENTER WHEN DID THE CUSTOMER BOUGHT: ".
       ACCEPT CUSTOMER-DATE.
       PERFORM VALIDATE-FIELDS.

   VALIDATE-FIELDS.
       MOVE "Y" TO ENTRY-STATUS.
       IF CUSTOMER-NAME = SPACE
           DISPLAY "CUSTOMER NAME MUST BE ENTERED"
       MOVE "N" TO ENTRY-STATUS.

   ADD-THIS-RECORD.
       MOVE CUSTOMER-RECORD TO PRINTER-RECORD.
       WRITE CUSTOMER-RECORD.
       WRITE PRINTER-RECORD BEFORE ADVANCING 1.

   ANY-MORE.
       DISPLAY "IS THERE ANY MORE INPUT?".
       ACCEPT Y-N.
       IF Y-N = "Y"
           MOVE "Y" TO Y-N.
       IF Y-N NOT = "Y"
           MOVE "N" TO Y-N.


   END PROGRAM HENSEM.

你需要发布所有消息的全文。我处理COBOL已经有几十年了,但我在任何地方都没有看到指定的打印机名称,这似乎是您问题的根源。@CareyGregory在选择打印机文件时我必须指定名称吗?看起来您有答案了。您需要发布所有消息的全文。我处理COBOL已经几十年了,但我在任何地方都没有看到指定的打印机名称,这似乎是您问题的根源。@CareyGregory在选择打印机文件时我必须指定名称吗?看起来您有答案了。有关使用COBOL打印的更多提示,请参阅GNU COBOL常见问题解答,3.15如何使用GNU COBOL打印到打印机,通过一个简单的调用和cups-PDF获取PDF输出。有关使用COBOL打印的更多提示,请参阅GNU COBOL FAQ,3.15如何使用GNU COBOL打印到打印机,通过一个简单的调用和cups-PDF获取PDF输出。