我想在一个字段中创建三个字段,Cobol中每个字之间只有一个空格。我这是正确的格式
STRING SORT-WORKER-LAST SPACE
SORT-WORKER-FIRST SPACE
SORT-WORKER-MID SPACE
DELIMITED BY SIZE
INTO REC-VSAM-NAME
这没有用:
STRING SORT-WORKER-LAST SPACE
SORT-WORKER-FIRST SPACE
SORT-WORKER-MID SPACE
DELIMITED BY space
INTO REC-VSAM-NAME
STRING SORT-WORKER-LAST
SORT-WORKER-FIRST
SORT-WORKER-MID
DELIMITED BY space
INTO REC-VSAM-NAME
也不工作。
SS5726 test test t
" " DELIMETED BY SPACE
以上代码并没有给我提供我想要的东西。
答案 0 :(得分:3)
...试
STRING SORT-WORKER-LAST DELIMITED BY SPACE
" " DELIMITED BY SIZE
SORT-WORKER-FIRST DELIMITED BY SPACE
" " DELIMITED BY SIZE
SORT-WORKER-MID DELIMITED BY SPACE
INTO REC-VSAM-NAME
答案 1 :(得分:3)
当在STRING语句中使用时,比喻常量SPACE(或空格,它们是等价的,复数表示除了人类阅读之外的任何内容)都有一个字节的长度。
您可能还没有完成此操作。如果源字段包含嵌入空格,则最好放弃STRING并执行其他操作。
如果您继续使用STRING或者还有其他时间想要考虑使用它,那么您还必须考虑输出字段的长度。如果你对它没有做任何事情,它将被悄然截断。
我已经提供了一个如何做某事的例子。请注意,STRING现在有一个条件元素(ON),因此您必须通过END-STRING界定STRING的范围(也可以,但是粘性,具有完全停止/句点)。
如果逻辑上不能破坏输出,则不需要ON OVERFLOW。此外,如果您被告知要做的是“只是截断”,那么它可以省略,虽然我倾向于至少计算它们,并在程序结束时显示计数。然后,当分析师说,“没有任何东西,只要截断,如果有”,你可以回去说当你进行体积测试时有3,931。
正如ScottNelson在评论中指出的那样,STRING有几点需要注意。您在此担心的是,只有STRING选择的数据才会出现在您的输出字段中,您的输出字段将不进行空格填充,就像在MOVE语句之后一样。
因为到目前为止你一直在使用固定长度的字段,所以你不会注意到这一点。一旦进行了更正,您可能会发现,如果您没有首先将输出字段设置为SPACE,那么您将混合使用值,其中一些值会从之前的内容中遗留下来。
STRING的另一个是POINTER。
如果你想要的话,STRING的工作方式的效果很有用。当你不想采取这种行动时,你只需要知道如何避免这些事情。
每次在COBOL中找到新内容时,请点击该手册。首先是语言参考。试着去理解。编程指南。进一步尝试。如果不确定,请试验。阅读手册。实验。继续直到明白。
每次我阅读本手册时,我都会尝试查看其他内容。知道一种语言的一种技巧是知道可以完成的事情的类型,知道在哪里找到细节,以及如何理解这些解释。
你会发现所有“复杂”的COBOL动词,STRING,UNSTRING,INSPECT都有类似的东西。他们的行为似乎最初对你不利,但是当你需要它们时,它们是有用的,否则就不可用。
IDENTIFICATION DIVISION.
PROGRAM-ID. DOUGH.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PART-1 PIC X(30) VALUE "TEST".
01 PART-2 PIC X(30) VALUE "TEST".
01 PART-3 PIC X(30) VALUE "T".
01 ALL-PARTS PIC X(30).
PROCEDURE DIVISION.
MOVE SPACE TO ALL-PARTS
* MOVE ZERO TO data-name-used-with-POINTER
* (if used)
STRING PART-1 DELIMITED BY SPACE
SPACE DELIMITED BY SIZE
PART-2 DELIMITED BY SPACE
SPACE DELIMITED BY SIZE
PART-3 DELIMITED BY SPACE
INTO ALL-PARTS
ON OVERFLOW
DISPLAY "SORRY, YOUR DATA WAS TRUNCATED"
END-STRING
DISPLAY
">"
ALL-PARTS
"<"
GOBACK
.
答案 2 :(得分:1)
尝试
STRING
field-1 DELIMITED BY SIZE
" " DELIMITED BY SIZE
field-2 DELIMITED BY SIZE
INTO big-field
答案 3 :(得分:1)
为了完整起见,如果您希望能够处理具有嵌入空格的数据字段(换句话说,包含多个单词的文本字段),则可以执行以下操作:
INSPECT SORT-WORKER-FIRST
REPLACING TRAILING SPACES BY LOW-VALUES.
INSPECT SORT-WORKER-MID
REPLACING TRAILING SPACES BY LOW-VALUES.
INSPECT SORT-WORKER-LAST
REPLACING TRAILING SPACES BY LOW-VALUES.
STRING SORT-WORKER-LAST " " SORT-WORKER-FIRST " " SORT-WORKER-MID
DELIMITED BY LOW-VALUE INTO REC-VSAM-NAME.
例如,当SORT-WORKER-LAST
包含类似&#34; VAN DYKE&#34;
如果您不想修改现有的SORT-WORKER-*
字段,则必须将每个字段移至单独的字段INSPECT
然后STRING
这些字段
你在这里做的是将每个字符串转换为&#39; C&#39;等价物 - 由NUL终止。
当然,这取决于你的Cobol是否足够新。