【问题标题】:COBOL expression as index in table arrayCOBOL 表达式作为表数组中的索引
【发布时间】:2013-02-10 13:10:06
【问题描述】:

只是一个简短的快速问题。 如何将表达式索引到 COBOL 数组中? 例如,如果我的索引k=1,我想执行以下操作来查找k=2的元素

element(k+1)

很遗憾,这在 COBOL 中是不可接受的,我想知道是否有任何替代方案?

【问题讨论】:

    标签: arrays indexing cobol


    【解决方案1】:

    我不确定你为什么认为这行不通,只要你把它放在 Cobol 语句中。

       ID DIVISION. 
       PROGRAM-ID. SUBMOD. 
       DATA DIVISION. 
       WORKING-STORAGE SECTION. 
       01  A-NICELY-NAMED-TABLE. 
           05  FILLER OCCURS 2 TIMES. 
               10 A-NICELY-NAMED-ENTRY  PIC X. 
       01  ANOTHER-PIECE-OF-DATA        PIC X VALUE SPACE. 
       01  A-NICELY-NAMED-SUBSCRIPT BINARY 
                                        PIC 9(4). 
       LINKAGE SECTION. 
       01  L-INPUT                      PIC X(4). 
       01  L-TO-HEX                     PIC BXBXBXBX. 
       PROCEDURE DIVISION USING L-INPUT L-TO-HEX. 
           MOVE "A"                     TO A-NICELY-NAMED-ENTRY ( 1 )
           MOVE "B"                     TO A-NICELY-NAMED-ENTRY ( 2 )
           MOVE 1                       TO A-NICELY-NAMED-SUBSCRIPT 
           IF A-NICELY-NAMED-ENTRY ( A-NICELY-NAMED-SUBSCRIPT + 1 ) 
               EQUAL TO "B" 
               MOVE A-NICELY-NAMED-ENTRY 
                ( A-NICELY-NAMED-SUBSCRIPT + 1 ) 
                                        TO ANOTHER-PIECE-OF-DATA 
           END-IF 
           DISPLAY ">" ANOTHER-PIECE-OF-DATA "<" 
    
    
           GOBACK 
           . 
    

    输出是:

    >B<
    

    参考您的评论,无论如何这都不是“严格”的事情。就是“+1”是一回事,是“相对下标”,而“+1”是另外一回事,是第二个下标。

    根据您的编译器,您可以编写代码:

    MOVE ELEMENT(k++1) ...
    

    您可能不得不忍受编译器的一些抱怨,我想在某些情况下它可能不起作用。然而,这将是编写 Cobol 的一种可怕的方式。

    我建议不要使用像 ELEMENT 这样的名称。太可能在未来某个时候出现为 Cobol 的“保留词”。不要简写。使用好的名称,使用有效的间距。它会帮助您稍后了解您的程序,并帮助其他需要查看它的人。

    【讨论】:

    • 其实,你是对的。这只是在参数中有空间的问题。忽略了那里语言的严格性。谢谢!
    • 另外,虽然我不确定,但如果您使用“真实”索引(如 INDEXED BY...),我认为这不会起作用。没试过,所以我不是 100% 确定。
    • 它也适用于 INDEXED BY。如果您想要“负”相对下标,则不能以同样丑陋的方式“压缩”,因为编译器会认为它是格式错误的数据名称的一部分。 “下标”意味着使用“下标”或“索引”。 “相对下标”适用于下标,因此适用于下标或索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多