我正在尝试使用XML PARSE在COBOL中解析XML文档,一次一个段。在CONTENT-CHARACTERS中检查我正在做COMPUTE WS-XML-LEN = FUNCTION LENGTH(XML-TEXT)。
有一些我不想处理的START OF ELEMENT,因为它们也会进入CONTENT-CHARACTERS检查并计算(XML-TEXT)= 1的长度,即使XML-TEXT是空白的
你能告诉我原因是什么吗?我应该在我的程序中修改。
答案 0 :(得分:1)
FUNCTION LENGTH(xyz)给出了FIELD的长度,而不是DATA的“长度”。 COBOL没有“字符串分隔符”(文字的特殊用途除外)。
如果xyz是PIC X(30),它将每次返回30“,无论该字段的内容如何。
您尚未提及您正在使用的编译器或操作系统,但如果您使用的是IBM Cobol,则应生成“LIST”输出(生成的伪汇编代码)。您将看到为FUNCTION LENGTH(某物)生成的代码只是来自“文字池”的MVC,它将指向一个与您的字段长度相同的常量值,并且(可能)仅在那里因为你正在使用FUNCTION LENGTH。
“特殊登记册”的长度类似,如果你有。
如果您想知道某个字段是否全为空白:
IF something EQUAL TO SPACES
如果您需要知道字段的长度,并且知道特定的“尾随”或“前导”值(空格,零,低值,等等),那么您必须编写一些代码来执行此操作。 / p>
对于计算数据和忽略尾随空格,我们常用的方法是使用FUNCTION REVERSE然后检查... TALLYING ...用于领先空间。还有其他方法。
你需要字段的长度(计算数据的长度),但是字段的长度是不变的所以只计算一次(FUNCTION LENGTH或plain LENGTH OF)。 / p>
FUNCTION LENGTH和LENGTH OF之间存在细微差别,这可能不会影响您的任务。