我有字符串' #$ rahul'而且我必须在不使用检查动词的情况下计算alpha bates的数量。也没有使用ord子句来表示ASCII值。我的导师告诉我使用空数组,但它是如何使用的?我尝试过,但它也适用于符号。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-TABLE.
05 WS-A OCCURS 3 TIMES INDEXED BY I.
10 WS-B PIC A(2).
10 WS-C OCCURS 2 TIMES INDEXED BY J.
15 WS-D PIC X(3).
PROCEDURE DIVISION.
MOVE '@#@#DEF34GHIJKL56MNOPQR' TO WS-TABLE.
PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I >3
STOP RUN.
A-PARA.
PERFORM C-PARA VARYING J FROM 1 BY 1 UNTIL J>2.
C-PARA.
if ws-table(1) equals to spaces
continue
else
add +1 to ws-count
end-if
DISPLAY WS-C(I,J).
答案 0 :(得分:3)
除了你的表定义和表的实际使用之外,你已经基本上已经有了这个想法,除非你不确定具体是要测试什么。
您需要做的是在COBOL文档中找到关于类条件和类测试的部分。
我怀疑这段代码:
if ws-table(1) equals to spaces
continue
else
add +1 to ws-count
end-if
已加入匆忙。根据您的数据,ws-table(1)
永远不会是空格,ws-count
未定义。
回到你的定义。您正在定义一个包含三个部分(WS-A OCCURS 3
)的结构,每个部分由一个双字节字母字段和两个三字节字母数字字段组成。该定义对您的任务没有直接的用处。
01 the-data.
05 FILLER OCCURS 24 TIMES
INDEXED BY data-byte-index.
10 the-data-byte PIC X.
这将允许您单独查看每个字节。请注意,您总是可以使用好的名称,这样可以使您的程序更容易理解,减少不小心错误的可能性,并让人们的生活,包括您在一段时间后返回程序时的生活,通常更容易。
请注意,您也可以使用引用修改并失去可读性,以减少输入。
您的计划格式
除非它是由你决定的(虽然我以前从未见过它超过30年,我最近已经看过它几次),“缩进”这样的东西绝对没有意义,比如WORKKING-STORAGE部分,甚至段落/部分标签。他们已经拥有了他们需要的所有缩进,并且进一步缩进不会增加任何内容,这需要更多的打字,并且还会让经验丰富的COBOL程序员想知道你为什么要这样做。
自1985年COBOL标准以来,在程序部门中使用全站/句号非常放松。由于错误位置的完整停止/周期可能会导致错误,这是一件好事。如果你充分利用它也会很好。逗号看起来非常像完全停止/句点在代码中有任何用处。他们永远不必在那里,所以让他们没有任何好处。还可以/应该避免像THEN
这样的噪音词。与逗号不同,间距可以是程序格式的福音。
以上是您的代码,重新格式化:
MOVE '@#@#DEF34GHIJKL56MNOPQR'
TO WS-TABLE
PERFORM A-PARA
VARYING I
FROM 1
BY 1
UNTIL I > 3
STOP RUN
.
A-PARA.
PERFORM C-PARA
VARYING J
FROM 1
BY 1
UNTIL J > 2
.
C-PARA.
if ws-table ( 1 ) equal to space
continue
else
add +1 to ws-count
end-if
DISPLAY
WS-C ( I J )
.
使用一些专有名称,它开始看起来像一个真正的程序。
注意,并非所有人都同意如何格式化程序。严重。