计算数据中字母字符的数量
Count number of alphabetic charcters in data
我的字符串为“#$rahul”,我必须在不使用检查动词的情况下计算 alpha bates 的数量。也不对 ASCII 值使用 by ord 子句。我的导师告诉我使用空数组,但它是如何使用的?我试过了,但它也算作符号。
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).
除了你的 table-definition 和 table 的实际使用之外,你基本上已经有了想法,除了你不确定具体要测试什么。
您需要做的是在您的 COBOL 文档中找到有关 class 条件 和 class 测试[=46 的部分=].
我怀疑这段代码:
if ws-table(1) equals to spaces
continue
else
add +1 to ws-count
end-if
仓促添加。使用您的数据,ws-table(1)
永远不会是 space,并且 ws-count
未定义。
回到你的定义。您正在定义一个包含三个部分 (WS-A OCCURS 3
) 的结构,每个部分都包含一个 two-byte 字母字段,后跟两个 three-byte 字母数字字段。该定义对您的任务没有直接用处。
01 the-data.
05 FILLER OCCURS 24 TIMES
INDEXED BY data-byte-index.
10 the-data-byte PIC X.
这样您就可以单独查看每个字节。请注意,您始终可以使用好的名称,这将使您的程序更易于理解,减少粗心错误的可能性,并使人们的生活,包括您以后 return 对某个程序的生活,通常更容易。
请注意,您也可以使用 reference-modification 并为了减少输入而牺牲可读性。
你的程序格式
除非它是你口授的(虽然我 30 多年来从未见过它,但我最近见过几次),"indenting" 之类的事情绝对没有意义WORKKING-STORAGE 部分,甚至 paragraph/SECTION 标签。他们已经有了他们需要的所有缩进,进一步的缩进不会增加任何东西,这需要更多的输入,并且还会导致有经验的 COBOL 程序员想知道你为什么要这样做。
自 1985 年 COBOL 标准以来,full-stops/periods 在 PROCEDURE DIVISION 中的使用大大放宽了。由于 full-stop/period 在错误的位置会导致错误,这是一件好事。如果你充分利用它也会很好。逗号看起来太像 full-stops/periods 在代码中没有任何用处。他们永远不必在那里,所以拥有他们没有任何好处。也可以避免 noise-words 像 THEN
can/should。与逗号不同,间距对程序的格式有好处。
这是你上面的代码,重新格式化:
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 )
.
使用一些专有名称,它开始看起来像一个真正的程序。
请注意,并非所有人都同意应如何格式化程序。说真的。
我的字符串为“#$rahul”,我必须在不使用检查动词的情况下计算 alpha bates 的数量。也不对 ASCII 值使用 by ord 子句。我的导师告诉我使用空数组,但它是如何使用的?我试过了,但它也算作符号。
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).
除了你的 table-definition 和 table 的实际使用之外,你基本上已经有了想法,除了你不确定具体要测试什么。
您需要做的是在您的 COBOL 文档中找到有关 class 条件 和 class 测试[=46 的部分=].
我怀疑这段代码:
if ws-table(1) equals to spaces
continue
else
add +1 to ws-count
end-if
仓促添加。使用您的数据,ws-table(1)
永远不会是 space,并且 ws-count
未定义。
回到你的定义。您正在定义一个包含三个部分 (WS-A OCCURS 3
) 的结构,每个部分都包含一个 two-byte 字母字段,后跟两个 three-byte 字母数字字段。该定义对您的任务没有直接用处。
01 the-data.
05 FILLER OCCURS 24 TIMES
INDEXED BY data-byte-index.
10 the-data-byte PIC X.
这样您就可以单独查看每个字节。请注意,您始终可以使用好的名称,这将使您的程序更易于理解,减少粗心错误的可能性,并使人们的生活,包括您以后 return 对某个程序的生活,通常更容易。
请注意,您也可以使用 reference-modification 并为了减少输入而牺牲可读性。
你的程序格式
除非它是你口授的(虽然我 30 多年来从未见过它,但我最近见过几次),"indenting" 之类的事情绝对没有意义WORKKING-STORAGE 部分,甚至 paragraph/SECTION 标签。他们已经有了他们需要的所有缩进,进一步的缩进不会增加任何东西,这需要更多的输入,并且还会导致有经验的 COBOL 程序员想知道你为什么要这样做。
自 1985 年 COBOL 标准以来,full-stops/periods 在 PROCEDURE DIVISION 中的使用大大放宽了。由于 full-stop/period 在错误的位置会导致错误,这是一件好事。如果你充分利用它也会很好。逗号看起来太像 full-stops/periods 在代码中没有任何用处。他们永远不必在那里,所以拥有他们没有任何好处。也可以避免 noise-words 像 THEN
can/should。与逗号不同,间距对程序的格式有好处。
这是你上面的代码,重新格式化:
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 )
.
使用一些专有名称,它开始看起来像一个真正的程序。
请注意,并非所有人都同意应如何格式化程序。说真的。