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