首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GnuCOBOL平凡的“回波”函数

GnuCOBOL平凡的“回波”函数
EN

Stack Overflow用户
提问于 2020-05-25 18:39:56
回答 1查看 89关注 0票数 1

如何为字符串处理创建X任意长度函数?琐碎(在其他语言中)“回显回复”做了一些意想不到的事情。文档、开放资源和常见问题解答( FAQ https://open-cobol.sourceforge.io/faq/index.html#id362 )都没有帮助。

代码语言:javascript
复制
   IDENTIFICATION DIVISION.
   PROGRAM-ID. stdtest.
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
   REPOSITORY.
       FUNCTION ALL INTRINSIC
       FUNCTION REPLY.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
       01 tst BINARY-SHORT UNSIGNED.
       01 expected PIC S9(6)V9(4) USAGE COMP.
       01 argA PIC S9(6)V9(4) USAGE COMP.
       01 argB PIC S9(6)V9(4) USAGE COMP.
   PROCEDURE DIVISION.
       *> must print whole string instead of first 8 chars
       DISPLAY FUNCTION REPLY("The quick brown fox jumps over the lazy dog").
       STOP RUN.
   END PROGRAM stdtest.

   IDENTIFICATION DIVISION.
   FUNCTION-ID. REPLY.
   ENVIRONMENT DIVISION.
   CONFIGURATION SECTION.
   REPOSITORY.
       FUNCTION ALL INTRINSIC.
   DATA DIVISION.
   LINKAGE SECTION.
       01 argument PIC X ANY LENGTH.
       01 result.
           05 argument-pointer USAGE POINTER.
   PROCEDURE DIVISION USING BY REFERENCE argument RETURNING result.
       *> https://open-cobol.sourceforge.io/faq/index.html#id362
       MOVE argument TO result.
   END FUNCTION REPLY.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 19:23:04

您的示例结果是8个字符,因为返回组(在您的机器上)有8个字节长(因为它下面的POINTER )。它编译时没有错误,因为您只引用组项,它是隐含的字母数字(-group)-item(如果添加USAGE NATIONAL,则为国家组项)。

使用(最近)“标准”COBOL的方法是可变长度的RETURNING项。

该标准为函数提供的选项是DYNAMIC LENGTH (理想版本,但GnuCOBOL尚未支持)或足够大到足以容纳数据的可变长度组(OCCURS 0 TO ... DEPENDING ON)。

以下示例应该可以工作(但是会导致内部码元错误,应该用即将到来的3.1rc1修复):

代码语言:javascript
复制
       IDENTIFICATION DIVISION.
       FUNCTION-ID. REPLY.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 arg-len   USAGE BINARY-LONG.
       LINKAGE SECTION.
       01 argument  PIC X ANY LENGTH.
       01 result.
          05 filler PIC X OCCURS 0 to 99999 DEPENDING ON arg-len.
       PROCEDURE DIVISION USING BY REFERENCE argument RETURNING result.
           MOVE FUNCTION LENGTH (argument) TO arg-len
           MOVE argument TO result.
       END FUNCTION REPLY.

注意:您可以在GnuCOBOL问题跟踪器中找到bug报告和修补程序,作为#641

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62008668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档