如何在 Cobol 中打印变量名称

波格丹P

我正在尝试将 cobol 程序中的变量名称传递给 C 函数。

   01 Message.
         03 varA         PIC X(32).
         03 varB         PIC X(32).

考虑到这个函数将在许多程序中使用并且变量的结构Message每次都会不同,我如何将变量的名称传递给C函数?我已经考虑制作另一个组数据项来包含变量名称,但这对我来说不是一个好的解决方案。

我在 AIX 上使用 Microfocus Server Express v5.1。

里克·史密斯

如何将变量的名称传递给 C 函数?

不能直接使用CALL USING;传递变量名至少,没有一个比组数据项更好的。

我在这里所做的是使用STRING带有REPLACE传递名称/值对语句的语句创建一个类似 JSON 的对象我选择这种方法是因为有很多开源库可以被调用C来解码JSON对象。它在文本长度和要传递的变量数量方面也非常灵活。

[编辑。更改了代码以将所有STRING语句数据项放置在REPLACE语句中。更改了一些名称以反映“名称/值”配对。删除了嵌套程序的字符串长度代码。]

   program-id. call-c.
   data division.
   working-storage section.
   1 msg.
    2 varA pic x(32) value "Message 1".
    2 varB pic x(32) value "Message 2".
   1 lengths binary.
    2 len-1 pic 9(4).
    2 len-2 pic 9(4).
   replace
       ==name-1== by =="varA"==
           ==value-1== by ==varA(1:len-1)==
       ==name-2== by =="varB"==
           ==value-2== by ==varB(1:len-2)==
       ==newline== by ==x"0a"==
       .
   1 json-string pic x(256).
   procedure division.
   begin.
       compute len-1 = function length (varA)
       call "rtrim-len" using varA len-1

       compute len-2 = function length (varB)
       call "rtrim-len" using varB len-2

       string
           "{" newline
               quote name-1 quote ": "
                 quote value-1 quote "," newline
               quote name-2 quote ": "
                 quote value-2 quote newline
           "}" x"00"
           delimited size into json-string
       call "c_prog" using
           by reference json-string
       stop run
       .

   program-id. rtrim-len.
   data division.
   linkage section.
   1 str pic x(256).
   1 str-len binary pic 9(4).
   procedure division using str str-len.
   begin.
       perform varying str-len from str-len by -1
       until str-len < 1 or str (str-len:1) not = space
           continue
       end-perform
       exit program
       .
   end program rtrim-len.
   end program call-c.

替代被调用C程序的COBOL程序。

   program-id. "c_prog".
   data division.
   working-storage section.
   1 json-string-count binary pic 9(4).
   1 json-string-pos binary pic 9(4).
   1 json-text-count binary pic 9(4).
   1 json-text pic x(64).
   linkage section.
   1 json-string pic x(256).
   procedure division using json-string.
   begin.
       move 0 to json-string-count
       inspect json-string tallying
           json-string-count for characters before x"00"
       move 1 to json-string-pos
       perform until json-string-pos > json-string-count
           unstring json-string delimited x"0a" or x"00"
               into json-text count json-text-count
               pointer json-string-pos
           display json-text (1:json-text-count)
       end-perform
       exit program
       .
   end program "c_prog".

输出:

{
"varA": "Message 1",
"varB": "Message 2"
}

如果TRIM函数可用,则不需要长度计算、数据项和嵌套程序,REPLACE语句变为,

   replace
       ==name-1== by =="varA"==
           ==value-1== by ==trim(varA)==
       ==name-2== by =="varB"==
           ==value-2== by ==trim(varB)==
       ==newline== by ==x"0a"==
       .

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在列表中打印变量名称

来自分类Dev

GO TO如何在COBOL中控制流程?

来自分类Dev

如何在COBOL中对表格排序?

来自分类Dev

如何打印变量名称?

来自分类Dev

如何在cobol中打印小数点?

来自分类Dev

如何在Cobol变量的开头添加五个空格?

来自分类Dev

如何打印变量名称及其值?

来自分类Dev

如何在CICS COBOL程序中引用传递的记录地址?

来自分类Dev

如何在COBOL中编写SQLite回调

来自分类Dev

如何在COBOL中存储VSAM密码文件的凭据?

来自分类Dev

如何在线编译cobol中的多个文件?

来自分类Dev

如何在COBOL程序的SYSOUT假脱机中打印输出时纠正此逻辑错误?

来自分类Dev

在COBOL中声明变量

来自分类Dev

如何在R函数中检测自由变量名称

来自分类Dev

如何在Tcl中创建动态变量名称

来自分类Dev

如何在 tkinter text="" 属性中包含变量名称?

来自分类Dev

如何从DB2上的COBOL存储过程中调用COBOL批处理程序

来自分类Dev

如何跳过行COBOL?

来自分类Dev

如何增加在变量名称中包含单词的变量?

来自分类Dev

如何从cobol的国家数据类型中删除@字符

来自分类Dev

新版Cobol中的句子

来自分类Dev

Cobol中的表索引

来自分类Dev

cobol中的逗号?

来自分类Dev

COBOL中的快乐数字

来自分类Dev

如何在公式中将字符串名称转换为R中的变量名称?

来自分类Dev

COBOL:打印其中包含变量的行

来自分类Dev

如何在JavaScript中的变量名称中使用变量的值?

来自分类Dev

如何在Scala中获取变量的值,其中以字符串形式获取变量名称

来自分类Dev

如何在 Swift 中打印变量的名称而不是值?