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

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

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

请注意,并非所有人都同意应如何格式化程序。说真的。