使用cobol计算变量的长度字符串
我在数据库表中有一个注释 我如何计算那根绳子的长度 我有一个变量,定义如下使用cobol计算变量的长度字符串,cobol,Cobol,我在数据库表中有一个注释 我如何计算那根绳子的长度 我有一个变量,定义如下 10 NOTE. 49 NOTE-LEN PIC S9(4) USAGE COMP. 49 NOTE-TEXT PIC X(500). 注释是一个500个字符的字符串。 我想计算音符长度。这里有一种常见的方法: MOVE ZERO TO count-of-trailing-spaces INSP
10 NOTE.
49 NOTE-LEN PIC S9(4) USAGE COMP.
49 NOTE-TEXT PIC X(500).
注释是一个500个字符的字符串。
我想计算音符长度。这里有一种常见的方法:
MOVE ZERO TO count-of-trailing-spaces
INSPECT FUNCTION REVERSE ( NOTE-TEXT )
TALLYING count-of-trailing-spaces
FOR LEADING SPACE
SUBTRACT count-of-trailing-spaces
FROM LENGTH OF ( NOTE-TEXT )
GIVING NOTE-LEN
函数REVERSE
将字段的字节交换为相反顺序<代码>检查没有计数。。。拖尾
(某些供应商的编译器除外,但它是非标准的),因此检查。。。字段反转后,可以使用前导…
有时我应该脱掉我的讽刺帽子。如果使用功能反转
,也要先检查字段中的空格,反转500个空格然后计算500个前导空格是没有意义的
还有“了解你的数据”。如果笔记大多很短,而且你做了很多,你可能想调查一下是否需要更快的笔记。这取决于你的数据和硬件是否能从中获益,但要记住这一点
也许值得调查的是,是否有人知道这个领域有多长,并且已经可以告诉你了
我只是从后面循环,计算空间(在第一次检查所有空间之后)。减少对CPU的压力。一种方法是:
IF NOTE-TEXT EQUAL TO SPACE
MOVE ZERO TO NOTE-LEN
ELSE
MOVE LENGTH OF NOTE-TEXT TO NOTE-LEN
PERFORM
UNTIL NOTE-TEXT-BYTE ( NOTE-LEN )
NOT EQUAL TO SPACE
SUBTRACT +1 FROM NOTE-LEN
END-PERFORM
END-IF
当然,这需要将NOTE-TEXT-BYTE
定义为NOTE-TEXT
的组成部分
49级可能很重要,所以不能这么巧妙:
49 NOTE-TEXT PIC X(500).
49 NOTE-TEXT-BYTE
REDEFINES NOTE-TEXT
OCCURS 500 PIC X.
也许49s为参考修改提供了一些理由。也许不是。这里是我最喜欢的:
If Note-Text > Spaces
Perform Varying Note-Len from Length of Note-Text by -1
Until Note-Text (Note-Len: 1) > Space
End-Perform
Else
Move Zero to Note-Len
End-If
使用GNUCobol
FUNCTION LENGTH(FUNCTION TRIM(note-text TRAILING))
在COBOL 2014发布之前,零长度项目的定义是错误的。“函数修剪”将始终为“全空间”字段返回至少一个空间。由于标准中已经定义了零长度项目,在不久的将来,这种情况可能会改变
INSPECT FUNCTION REVERSE ( NOTE-TEXT )
TALLYING count-of-trailing-spaces
FOR LEADING SPACE
SUBTRACT count-of-trailing-spaces
FROM LENGTH OF NOTE-TEXT
GIVING NOTE-LEN
注:
LENGTH OF(NOTE-TEXT)->For LENGTH OF
函数()不是必需的 检查这个@Satya,线程不是很健壮。嵌入的空格呢?对于最多500字节的文本,我希望在某个地方有一些。如果使用RESVERSE
我看到小于空格的尾随值将悄悄消失,您可能需要检查我的更新答案。我从来没有理解过比尔对空间的偏爱,当然你是对的。我假设Note文本将只包含可显示的1字节字符,否则就不清楚Note Len应该是什么。是的,我也是:-)只是如果不清楚,你会看到我所有的,我想不出不这样做的理由(除非规范说“去掉尾随空格和不可显示字符”)。我不明白为什么>/
这么受欢迎。一定有人在某处声明了它……和其他人一样,它可以在测试空间的IF
中。整洁,清晰。用具有代表性的数据/体积确认它不会使CPU融化,这样就可以了。这不是问题的答案。这是对公认答案的评论,即长度不需要括号。