返回具有字母数字或本地函数的变量结果

字母数字 或本地 函数的结果可能具有不同的长度和值,具体取决于函数自变量。

关于此任务

在以下示例中,移至 R3 的数据量以及 COMPUTE 语句的结果取决于 R1R2的值和大小:


01  R1    Pic x(10) value "e".
01  R2    Pic x(05) value "f".
01  R3    Pic x(20) value spaces.
01  L     Pic 99.
. . .
    Move Function Max(R1 R2) to R3
    Compute L = Function Length(Function Max(R1 R2))

此代码具有以下结果:

  • R2 求值为大于 R1
  • 字符串 "fbbbb" 将移至 R3,其中 b 表示空格。 ( R3 中未填充的字符位置用空格填充。)
  • L 求值为值 5。

如果 R1 包含 "g" 而不是 "e" ,那么代码将具有以下结果:

  • R1 将求值为大于 R2
  • 字符串 'gbbbbbbbbb' 将移至 R3。 ( R3 中未填充的字符位置将用空格填充。)
  • 值 10 将分配给 L

如果程序将国家数据用于函数自变量,那么函数结果的长度和值也可能不同。 例如,以下代码与之前的片段完全相同,但使用了国家数据,而不是字母数字数据。


01  R1    Pic n(10) national value "e".
01  R2    Pic n(05) national value "f".
01  R3    Pic n(20) national value spaces.
01  L     Pic 99    national.
. . .
    Move Function Max(R1 R2) to R3
    Compute L = Function Length(Function Max(R1 R2))

此代码具有以下结果,这些结果类似于第一组结果,但这些结果用于本地字符:

  • R2 求值为大于 R1
  • 此处以十六进制表示法显示的字符串 NX"6600 2000 2000 2000 2000" (相当于 'fbbbb' ,其中 b 表示空格) 将移至 R3R3 中未填充的字符位置将用本地空格填充。
  • L 求值为值 5 ,即 R2的本地字符位置中的长度。

您可能正在处理来自字母数字 或本地 函数的可变长度输出。 相应地规划您的计划。 例如,当您正在写入的记录的长度可能不同时,您可能需要考虑使用可变长度文件:


File Section.
FD  Output-File Recording Mode V.
01  Short-Customer-Record  Pic X(50).
01  Long-Customer-Record   Pic X(70).
Working-Storage Section.
01  R1    Pic x(50).
01  R2    Pic x(70).
. . .
    If R1 > R2
      Write Short-Customer-Record from R1
    Else
      Write Long-Customer-Record from R2
    End-if

相关参考
MAX (COBOL for Linux® on x86 Language Reference)