我对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.
答案 0 :(得分:1)
您的Micro Focus编译器支持SCREEN SECTION
。如果您使用SCREEN,那么您的数据只能输入到该字段的大小。
请参阅此处的Micro Focus文档https://supportline.microfocus.com/documentation/books/nx51ws01/nx51indx.htm中的ACCEPT格式4,并从中找到有关在Micro Focus COBOL中使用屏幕的屏幕截面文档和其他文档。
ACCEPT
和DISPLAY
是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个空白来绕过这一点,但可能不值得处理。