当在一个字符串的说法,比喻常SPACE(使用或空间,它们是等效的,复数意味着什么,除了人读取)具有一个字节的长度。
您可能未完成此操作。如果您的源字段包含嵌入的空格,则最好放弃STRING并执行其他操作。
如果您继续使用STRING或有其他时间想要考虑使用它,那么您还必须考虑输出字段的长度。如果你没有做任何事情,它会被安静地截断。
我已经包含了一个如何做某事的例子。请注意,STRING现在具有一个条件元素(ON),所以您必须通过END-STRING(也可能,但很俗气,以全站/句点)划分STRING的范围。
如果在逻辑上不能破坏输出,则不需要ON OVERFLOW。另外,如果你被告知要做的只是“截断”,那么它可以被省略,尽管我倾向于至少对它们进行计数,并在程序结束时显示计数。然后,当分析师说,“不会有任何,只是截断,如果有的话”,你可以回去说,当你进行音量测试时,有3931。
正如ScottNelson在评论中指出的那样,STRING有几个值得注意的地方。这里所关心的是,只有STRING选择的数据才会出现在输出字段中,您的输出字段将为而不是为空格填充,因为它在MOVE语句之后。
因为到目前为止您一直在使用固定长度的字段,所以您不会注意到这一点。一旦你有了修正,你可能会发现,如果你没有把输出字段设置为空格,你会得到一个混合的值,剩下的内容就是一些。
另一个与STRING是指针。
如果这是您想要的,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
.
我跑的代码都没有上述格式的工作。我现在正在运行这个例子。我想要名称之间有一个空格TEST TEST T –
这些是名字。如果可以嵌入空格,STRING将不会给你正确的结果。 'JOAO MARIA DE SOUSA'。要做的事情是写一个小程序来检查你的数据。你可能会很幸运,但名字有一个习惯,不只是滚动和合作。取决于源代码,以及它们是否已在系统中“清理”。简单的错字可以在任何地方得到空间,记住,如果系统允许的话。另外请记住,你可能会吹出你输出的长度,所以你应该检查一下。 –
没有嵌入式空间。我现在正在工作。我错误地将“SIZE DELIMITED BY SIZE”作为单个参数,只是将其放在最后。一旦我意识到这是它自己的实际参数,它现在可以工作。 –