计算数据中字母字符的数量

时间:2016-01-13 07:33:58

标签: cobol

我有字符串' #$ 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).

1 个答案:

答案 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 )
       .

使用一些专有名称,它开始看起来像一个真正的程序。

注意,并非所有人都同意如何格式化程序。严重。