【问题标题】:Best way to create a key-value "dict" in COBOL在 COBOL 中创建键值“dict”的最佳方法
【发布时间】:2021-05-29 17:38:41
【问题描述】:

我对 Cobol 还很陌生,在尝试创建类似于 python 字典的东西时遇到了困难,我们在其中传递一个键,字典返回它的值。

Python 示例:

>>> dict
{'AC': 'Acre', 'AL': 'Alagoas', 'AP': 'Amapa'}
>>> dict['AC']
'Acre'

我正在尝试在 cobol 中执行此操作,使用重新定义创建两个数组(一个用于键,另一个用于值)。 我已经创建了数组,但是一旦我只能访问具有整数值的数组,就无法将这两个数组关联到一个键值函数中。

这里是我的数据部门,如果有人可以帮助提供代码示例。

   DATA DIVISION.
   FILE SECTION.
   WORKING-STORAGE SECTION.
       01 WRK-KEYS.
           02 FILLER PIC X(2) VALUE "AC".
           02 FILLER PIC X(2) VALUE "AL".
           02 FILLER PIC X(2) VALUE "AP".

       01 WRK-TABLE-KEYS REDEFINES WRK-KEYS.
           02 WRK-KEY PIC X(2) OCCURS 3 TIMES.

       01 WRK-VALUES.
           02 FILLER PIC X(19) VALUE "Acre".
           02 FILLER PIC X(19) VALUE "Alagoas".
           02 FILLER PIC X(19) VALUE "Amapa".           

       01 WRK-TABLE-VALUES REDEFINES WRK-VALUES.
           02 WRK-VALUE PIC X(10) OCCURS 3 TIMES.

【问题讨论】:

  • 在保持两个独立的数组同步时会遇到问题。您最好创建一个数组,每次出现两个值。您的代码基本上会读取数组,当键与搜索词匹配时,检索值。对于几千个键,线性搜索就可以了。对于大量键,二分查找会更有效。
  • 吉尔伯特给出了正确的建议:创建一个带有“键”和“数据”字段的表以获得类似的东西。然后使用SEARCH 获取给定键的数据(您会发现需要添加INDEXED BYKEY 子句,请参阅任何COBOL 语言参考,例如gnucobol.sourceforge.io/HTML/gnucobpg.html#SEARCH)。

标签: cobol


【解决方案1】:

您可以使用表格,如下例所示:

IDENTIFICATION DIVISION.
PROGRAM-ID. STATES.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01  STATES-TABLE.
       05  FILLER  PIC X(2)    VALUE  "AC".
       05  FILLER  PIC X(7)    VALUE  "Acre   ".
       05  FILLER  PIC X(2)    VALUE  "AL".
       05  FILLER  PIC X(7)    VALUE  "Alagoas".
       05  FILLER  PIC X(2)    VALUE  "AP".
       05  FILLER  PIC X(7)    VALUE  "Amapá ".
   01  RDF-STATES-TABLE REDEFINES STATES-TABLE.
       05  STATE-GROUP  OCCURS 3 TIMES.
           10  STATE-CODE      PIC X(2).
           10  STATE-NAME      PIC X(7).
PROCEDURE DIVISION.
   DISPLAY "STATES : "STATES-TABLE.
   DISPLAY 'STATE-CODE(1) : ' STATE-CODE(1).
   DISPLAY 'STATE-NAME(1) : ' STATE-NAME(1).
   DISPLAY 'STATE-CODE(2) : ' STATE-CODE(2).
   DISPLAY 'STATE-NAME(2) : ' STATE-NAME(2).
   DISPLAY 'STATE-CODE(3) : ' STATE-CODE(3).
   DISPLAY 'STATE-NAME(3) : ' STATE-NAME(3).
STOP RUN.

导致:

$ ./states 
STATES : ACAcre   ALAlagoasAPAmapá 
STATE-CODE(1) : AC
STATE-NAME(1) : Acre   
STATE-CODE(2) : AL
STATE-NAME(2) : Alagoas
STATE-CODE(3) : AP
STATE-NAME(3) : Amapá 

请记住,á 在 UTF-8 中使用两个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2013-02-19
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多