Cobol 如何处理作为CALL语句参数的文字?

Cobol 如何处理作为CALL语句参数的文字?,cobol,Cobol,我试图传递一个字符串文本作为CALL语句的参数 使用“somestringliterarg”调用“somesprogram” 我必须将参数定义为被调用子程序中的链接项: 链接部分。 77一些字符串参数picx(20)。 这是可行的,但当我传递一个小于20个字符的字符串时,运行时开始抱怨: 使用小于相应链接项的项(#1)通过 给定的字符串文字长度必须为20个字符。但我有理由将字符串文本作为参数传递: 我懒得为传递给程序的每个项目定义一个临时变量。对于我传递给程序的每个项目,在工作存储器中有1

我试图传递一个字符串文本作为
CALL
语句的参数

使用“somestringliterarg”调用“somesprogram”
我必须将参数定义为被调用子程序中的链接项:

链接部分。
77一些字符串参数picx(20)。
这是可行的,但当我传递一个小于20个字符的字符串时,运行时开始抱怨:

使用小于相应链接项的项(#1)通过

给定的字符串文字长度必须为20个字符。但我有理由将字符串文本作为参数传递:

  • 我懒得为传递给程序的每个项目定义一个临时变量。对于我传递给程序的每个项目,在工作存储器中有100个不同长度的“临时”变量,这会使程序变得不必要的混乱

    将“ShortStrLit”移动到SOME-TEMP-VAR
    使用SOME-TEMP-VAR调用“SOMEPROGRAM”
    
  • 我也不想手动填充字符串文字以匹配所需的20个字符的长度:

    使用“shortStrLit”调用“SOMEPROGRAM”
    
我的一个问题是,或者当然:如何传递一个文本作为
CALL
语句的参数?但是,更重要的是,基本问题是:如何将文本作为
调用
语句的参数传递?
例如,如果我传递
9
,它是被解释为内容为“9”的字符串,还是编译时转换为整数


我正在Windows 10上运行MicroFocus ACUCOBOL-GT 9.2.4。

这里有两个问题:

首先-我应该如何传递字母数字文字:

对于
使用“字母数字文字”调用一些cobol程序
cobol 2002添加了以下内容:

LINKAGE SECTION.
 01 SOME-STRING-ARGUMENT PIC X ANY LENGTH.
如果您的编译器不支持它,那么您必须填充文本或使用变量

第二个-是数字文字,解释为字母数字:

我见过的所有编译器都将其转换为整数-如何以及最重要的是什么类型取决于所使用的编译器…

这里有两个问题:

首先-我应该如何传递字母数字文字:

对于
使用“字母数字文字”调用一些cobol程序
cobol 2002添加了以下内容:

LINKAGE SECTION.
 01 SOME-STRING-ARGUMENT PIC X ANY LENGTH.
如果您的编译器不支持它,那么您必须填充文本或使用变量

第二个-是数字文字,解释为字母数字:


我见过的所有编译器都将其转换为整数-具体转换方式和最重要的类型取决于所使用的编译器…

picx isCobol支持任何长度。 isCobol支持编译acucobol源代码

我不知道acucobol是否可以支持,但如果可以,您可以在linkage部分定义一个字符串(java.lang.string)。isCobol也支持这一点

working-storage section.
77 SOME-STRING-ARGUMENT PIC X(20).

linkage section.
77  this-string object reference j-string.

procedure dividion using this-string.
main.
    set some-string-argument to this-string.

Pic x任何长度都由isCobol支持。 isCobol支持编译acucobol源代码

我不知道acucobol是否可以支持,但如果可以,您可以在linkage部分定义一个字符串(java.lang.string)。isCobol也支持这一点

working-storage section.
77 SOME-STRING-ARGUMENT PIC X(20).

linkage section.
77  this-string object reference j-string.

procedure dividion using this-string.
main.
    set some-string-argument to this-string.

编译器和操作系统。消息的完整参考(如果有消息编号)。它是AcuCOBOL吗?如果你将成为唯一一个在这个项目上工作的人,那就尽情地懒惰吧。下次看节目时不要再问问题了。如果不是的话,如果将来有人要看这个节目,我建议不要看。每次有人看程序时,你的懒惰就是其他人在这条线上的额外时间。分散在过程部分的文字(除了自定义使用之外,如将1添加到记录计数中)是个坏主意。为什么不能在数据定义上使用VALUE子句呢。其实打字并不多,只要掌握你的编辑器就行了。请记住或注意,COBOL没有“字符串”。请看一下您正在使用的编译器的文档,在调用中使用的文字是“扩展”的一个方面。@BillWoodger“您的懒惰是其他人在每次查看程序时的额外时间。”我想懒惰不是唯一涉及的事。我宁愿在工作存储器中使用字符串文字,而不是100个临时变量。因此,关闭开关,使用z字面值,并在被调用的程序中对它们进行排序。我真的不知道这对你来说有多容易,但如果只有你,请在itCompiler和OS上。消息的完整参考(如果有消息编号)。它是AcuCOBOL吗?如果你将成为唯一一个在这个项目上工作的人,那就尽情地懒惰吧。下次看节目时不要再问问题了。如果不是的话,如果将来有人要看这个节目,我建议不要看。每次有人看程序时,你的懒惰就是其他人在这条线上的额外时间。分散在过程部分的文字(除了自定义使用之外,如将1添加到记录计数中)是个坏主意。为什么不能在数据定义上使用VALUE子句呢。其实打字并不多,只要掌握你的编辑器就行了。请记住或注意,COBOL没有“字符串”。请看一下您正在使用的编译器的文档,在调用中使用的文字是“扩展”的一个方面。@BillWoodger“您的懒惰是其他人在每次查看程序时的额外时间。”我想懒惰不是唯一涉及的事。我宁愿在工作存储器中使用字符串文字,而不是100个临时变量。因此,关闭开关,使用z字面值,并在被调用的程序中对它们进行排序。我真的不知道这对你来说有多容易,但如果它只会是你的话,那就让它
任意长度
——我的编译器不支持它,但这仍然是我一直在寻找的。(我想我一定要使用一个变量。)
任意长度
——我的编译器不支持它,但仍然支持