我正在阅读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
我对它的作用有三种可能的理解:
UUUUUU-CO-CLE-ERR-DB2
并用','
分隔每个值,最后一个变量用大小分隔; UUUUUU-CO-CLE-ERR-DB2
并用','
分隔每个值,但所有值都按大小分隔(这意味着在这种情况下DELIMITED BY SIZE
适用于所有在string命令中传递的值; WK-NO-EMP-SGE
将由','
分隔,WK-DT-DEB-PER-FEU-TEM
由','
分隔,然后WK-DT-FIN-PER-FEU-TEM
将分隔DELIMITED BY SIZE
。我的哪一个读书实际上是好的?
答案 0 :(得分:5)
这里是STRING的语法图(来自 Enterprise COBOL语言参考):
现在您需要知道如何阅读它。
幸运的是,同一文件告诉你如何:
如何阅读语法图
使用以下描述阅读本文中的语法图 文件:
。从左到右,从上到下阅读语法图, 沿着这条线的路径。
>> ---符号表示语法图的开头。
--->符号表示语法图继续在 下一行。
> ---符号表示语法图继续 上一行。
---><符号表示语法图的结尾。图表 完整陈述以外的句法单位以> ---开头 符号并以--->结束符号
。所需项目显示在水平线(主路径)上。
。可选项目显示在主路径下方。
。如果您可以选择两个或更多项目,它们会垂直显示, 在堆栈中。
如果您必须选择其中一个项目,则会显示堆栈中的一个项目 主要道路。
如果选择其中一个项目是可选项,则会显示整个堆栈 在主要道路下面。
。返回主线上方左侧的箭头表示项目 可以重复。
堆栈上方的重复箭头表示您可以创建多个箭头 从堆积的物品中选择,或重复一个选择。
。变量以斜体小写字母显示(例如,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