代码之家  ›  专栏  ›  技术社区  ›  MC Emperor

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

  •  1
  • MC Emperor  · 技术社区  · 8 年前

    我正在尝试传递字符串文本作为 CALL 陈述

    CALL "SOMEPROGRAM" USING "SomeStringLiteralArg"
    

    我必须将参数定义为调用子程序中的链接项:

    LINKAGE SECTION.
     77 SOME-STRING-ARGUMENT PIC X(20).
    

    这是可行的,但当我传递的字符串长度小于20个字符时,运行库开始抱怨:

    通过的USING项(#1)小于相应的LINKAGE项。

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

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

      MOVE "ShortStrLit" TO SOME-TEMP-VAR
      CALL "SOMEPROGRAM" USING SOME-TEMP-VAR
      
    • 我也不想手动填充字符串文字以匹配所需的20个字符的长度:

      CALL "SOMEPROGRAM" USING "shortStrLit         "
      

    我的一个问题是,或者说当然:我如何将文字作为参数传递给 呼叫 如何将文字作为参数传递给 呼叫 语句已处理? 例如,如果我通过 9 ,它是解释为内容为“9”的字符串,还是编译时转换为整数?


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

    2 回复  |  直到 8 年前
        1
  •  5
  •   Simon Sobisch    8 年前

    这里有两个问题:

    First-如何传递字母数字文字:

    对于 CALL some-cobol-prog USING "alphanumeric literal" COBOL 2002增加了以下内容:

    LINKAGE SECTION.
     01 SOME-STRING-ARGUMENT PIC X ANY LENGTH.
    

    如果编译器不支持它,则必须填充文字或使用变量。

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

    我见过的所有编译器都会将其转换为整数-最重要的是,究竟什么类型取决于所使用的编译器。。。

        2
  •  0
  •   Carlos    8 年前

    isCobol支持Pic x任意长度。 isCobol支持编译acucobol源代码。

    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.