我有一个字符串,我希望计算字符的数量,直到找到某个字符模式。有没有办法使用INSPECT TALLYING检查多个字符?
例如:
给一个字符串:askabanskarkartikrockstar
我想知道有多少个字符字符串中的kartik
之前在那里。
在正常情况下,我需要之前找到的字符数,说k
,给定字符串中,我会写的代码有些为:
INSPECT WS-INPUT-STRING TALLYING CT-COUNTER FOR CHARACTERS BEFORE LT-K
凡
WS-INPUT-STRING
是字母数字的,值为askabanskarkartikrockstar
,CT-COUNTER
是用于计数字符数的计数器LT-K
是一个字面值为k
。
但在这里,如果我想在上面的例子做同样的子字符串,如kartik
,将与kartik
,而不是仅仅k
工作更换的LT-K
价值?如果是,是否适用于具有十六进制数字形式的值的字母数字文字(例如,在文字X(02)
中,一个新行字符存储为x'0D25'
)?
我想在zOS IBM大型机v10上实现上面的代码。谢谢。
嗨@NealB,我尝试使用上面的方法来指定有限长度变量中的文字,例如'kartik'将被保存在长度为'X(06)'和'X'0D25'的变量中保存在一个'X(02)'变量中。该方法在变量中使用字母数字值可以很好地工作。当我尝试计算一个十六进制编码的字母数字值(如“X'0D25”)时,出现问题。在这里,它似乎只比较了第一个字符,即当我在X(01)变量中给出'X'0D'时它可以工作,但是当我用'X'0D25'为'X(02) '它不能计算正确的数量。 – ikartik90
@ ikartik90更好地再次查看您正在比较的变量的实际内容(可能其中一个包含双字节字符数据和其他单字节字符)。我已经使用二进制数据测试了'INSPECT TALLYING'(例如,在X'0D00250D250025中找到X'0D25'并且计数器返回为3,这是正确的)。 – NealB
我得到你想表达的意思,而且我已经非常明确地检查了我正在比较的变量的内容。我非常肯定它的正确性。让我吃惊的是,当我测试它的子字符串时它工作的同样的问题,为什么它不适用于十六进制子字符串。 – ikartik90