通过ACCEPT“捕获”输入数据的方法?

时间:2015-02-12 13:36:20

标签: cobol

我对Cobol很新,我正在编写一个基本的应用程序来开始使用该语言。现在它是一个100%的控制台应用程序,我遇到了一个问题,除非用户输入错误的数据,否则不会出现问题......并且在找不到问题的答案之后#34;通过谷歌,我似乎无法理解它,因此这里的主题。

我有一个变量USER-RECORD X(4),在运行期间我要求用户输入他/她的用户记录。我们假设他们输入“1234”,然后将1234保存并存储在文件中以及其他请求的数据中。但是,如果用户输入" 11234"错误地,程序将存储1123而不是1234,这是错误的输入数据。

我的问题是,是否可以用某种陈述包围ACCEPT动词,或者" catch"传入的数据以某种方式,如果发送的数据大于4个字符,会发生什么? 在用户确认数据之后,处理这些事情可能很聪明,但我似乎无法理解这一点。这有可能吗?

   01  USER-RECORD                                     PIC X(4).
   01  USER-RECORD-REDEFINED REDEFINES USER-RECORD     PIC 9(4).

   GET-USER-INPUT.
       MOVE 'N' TO WS-NUMERIC.
       PERFORM UNTIL WS-NUMERIC = 'Y'
           DISPLAY 'ENTER YOUR 4 DIGIT RECORD NUMBER: ' NO ADVANCING
           ACCEPT USER-RECORD *>---THIS IS WHERE MY QUESTION LIES---
           IF USER-RECORD-REDEFINED IS NUMERIC
               MOVE 'Y' TO WS-NUMERIC
           ELSE
               DISPLAY 'VALUE WAS NOT NUMERIC OR 2 SHORT, TRY AGAIN'
       END-PERFORM.

1 个答案:

答案 0 :(得分:1)

您的Micro Focus编译器支持SCREEN SECTION。如果您使用SCREEN,那么您的数据只能输入到该字段的大小。

请参阅此处的Micro Focus文档https://supportline.microfocus.com/documentation/books/nx51ws01/nx51indx.htm中的ACCEPT格式4,并从中找到有关在Micro Focus COBOL中使用屏幕的屏幕截面文档和其他文档。

ACCEPTDISPLAY是COBOL动词,它们在编译器和编译器之间的差异最大。当最初开发COBOL时,用户坐在屏幕上与节目互动的想法,或者说是未来主义。

假设您已经看到了您描述的效果,并希望使用一种非常简单,标准化的ACCEPT格式,我建议:

01  USER-RECORD                                     PIC X(80).
01  FILLER REDEFINES USER-RECORD.
    05  USER-ID-give-it-a-good-name                 PIC 9(4).
    05  FILLER                                      PIC X(76).
        88  USER-RECORD-EXTRAS-BLANK                VALUE SPACE.

SET USER-RECORD-EXTRAS-BLANK TO TRUE
ACCEPT USER-RECORD
[your existing code using the nice new name]
IF NOT ( USER-RECORD-EXTRAS-BLANK )
    [do something for also an error]
END-IF

用户可以通过空闲使用空格键获得76个空白来绕过这一点,但可能不值得处理。