STRING动词的行为

时间:2015-06-03 12:53:18

标签: cobol mainframe

我正在阅读COBOL程序文件,我正在努力理解STRING命令在以下示例中的工作方式

STRING  WK-NO-EMP-SGE                              
   ','                                         
   WK-DT-DEB-PER-FEU-TEM                       
   ','                                       
   WK-DT-FIN-PER-FEU-TEM                     
DELIMITED  BY  SIZE                           
INTO  UUUUUU-CO-CLE-ERR-DB2                   

我对它的作用有三种可能的理解:

  1. 代码将每个变量连接到UUUUUU-CO-CLE-ERR-DB2并用','分隔每个值,最后一个变量用大小分隔;
  2. 代码将每个变量连接到UUUUUU-CO-CLE-ERR-DB2并用','分隔每个值,但所有值都按大小分隔(这意味着在这种情况下DELIMITED BY SIZE适用于所有在string命令中传递的值;
  3. 或者每个变量都由特定字符分隔,例如WK-NO-EMP-SGE将由','分隔,WK-DT-DEB-PER-FEU-TEM','分隔,然后WK-DT-FIN-PER-FEU-TEM将分隔DELIMITED BY SIZE
  4. 我的哪一个读书实际上是好的?

2 个答案:

答案 0 :(得分:5)

这里是STRING的语法图(来自 Enterprise COBOL语言参考):

Syntax Diagram

现在您需要知道如何阅读它。

幸运的是,同一文件告诉你如何:

  

如何阅读语法图

     

使用以下描述阅读本文中的语法图   文件:

     

。从左到右,从上到下阅读语法图,   沿着这条线的路径。

     

>> ---符号表示语法图的开头。

     

--->符号表示语法图继续在   下一行。

     

> ---符号表示语法图继续   上一行。

     

---><符号表示语法图的结尾。图表   完整陈述以外的句法单位以> ---开头   符号并以--->结束符号

     

。所需项目显示在水平线(主路径)上。

     

。可选项目显示在主路径下方。

     

。如果您可以选择两个或更多项目,它们会垂直显示,   在堆栈中。

     

如果您必须选择其中一个项目,则会显示堆栈中的一个项目   主要道路。

     

如果选择其中一个项目是可选项,则会显示整个堆栈   在主要道路下面。

     

。返回主线上方左侧的箭头表示项目   可以重复。

     

堆栈上方的重复箭头表示您可以创建多个箭头   从堆积的物品中选择,或重复一个选择。

     

。变量以斜体小写字母显示(例如,parmx)。   它们代表用户提供的名称或值。

     

。如果标点符号,括号,算术运算符或其他   如果显示了这些符号,则必须将它们作为语法的一部分输入。

所有这些意味着,如果您遵循它,那么您的号码2是正确的。

您可以使用分隔符(当您没有固定长度的数据时)或仅使用大小。任何未明确分隔的项目都由下一个DELIMITED BY语句分隔。

STRING需要注意的一点是,在您的情况下并不重要,如果数据短于目标,则目标字段不会填充空格。对于可变长度数据,您需要在STRING执行之前将字段清空到空格。

答案 1 :(得分:0)

为了理解结果,必须掌握一些细微差别。如果有人有其他编程语言的经验,那么被SIZE删除可能会产生误导。

三个变量中的每一个都具有在WORKING-STORAGE中定义的大小。我们假设它看起来像这样。

05 WK-NO-EMP-SGE PIC X(04).
05 WK-DT-DEB-PER-FEU-TEM PIC X(10).
05 WK-DT-FIN-PER-FEU-TEM PIC X(10).

如果变量的值设置如下:

MOVE 'BOB' TO WK-NO-EMP-SGE.
MOVE 'Q' TO WK-DT-DEB-PER-FEU-TEM.
MOVE 'D19EIEIO2B' TO WK-DT-FIN-PER-FEU-TEM.

然后人们可能期望UUUUUU-CO-CLE-ERR-DB2的价值是:

BOB,Q,D19EIEIO2B

但它实际上是:

BOB ,Q         ,D19EIEIO2B