gpt4 book ai didi

cobol - 有没有办法使用 INSPECT TALLYING 检查多个字符?

转载 作者:行者123 更新时间:2023-12-02 00:35:37 25 4
gpt4 key购买 nike

我有一个字符串,我希望计算其字符数,直到找到特定的字符模式。

例如:

给出一个字符串: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,请将 LT-K 的值替换为 kartik 而不是仅仅 k 工作?如果是,则同样适用于具有十六进制数字形式值的字母数字文字(例如,在文字 X(02) 中,将换行符存储为 x' 0D25')?

我正在尝试在 zOS IBM 大型机 v10 中实现上述代码。谢谢。

最佳答案

您几乎已经回答了自己的问题...答案是肯定的,您可以做到这一点。这是一个工作示例程序:

  IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-INPUT-STRING PIC X(80).
01 WS-COUNTER PIC 9(4).
01 WS-TAG PIC X(10).
PROCEDURE DIVISION.
MAIN-PARAGRAPH.
MOVE 'askabanskarkartikrockstar' TO WS-INPUT-STRING
MOVE ZERO TO WS-COUNTER
MOVE 'kartik' TO WS-TAG
INSPECT WS-INPUT-STRING
TALLYING WS-COUNTER
FOR CHARACTERS BEFORE WS-TAG(1:6)
DISPLAY WS-COUNTER
GOBACK
.

WS-COUNTER 显示为 11,WS-TAG 字符串之前有 11 个字符。

请注意,我将 WS-TAG 定义为 PIC X(10)。该变量比您要查找的实际标签值长。为了防止 INSPECT 动词尝试匹配由以下引入的尾随空格:

      MOVE 'kartik' TO WS-TAG

我必须为 INSPECT 指定一个引用修改值来搜索。如果我只是使用:

      FOR CHARACTERS BEFORE WS-TAG

如果没有引用修改,WS-COUNTER 将是 80 - WS-INPUT-STRING 的长度。这是因为未找到字符串 'kartik ',并且计数器计算了整个输入字符串的长度。

另一种方法是将标签指定为文字:

      FOR CHARACTERS BEFORE 'kartik'

您可以将十六进制常量移至 PIC X 字段,如下所示:

      MOVE X'0D25' TO WS-TAG

这占用 2 个字符,因此您在 INSPECT 时可以使用 WS-TAG(1:2)

关于cobol - 有没有办法使用 INSPECT TALLYING 检查多个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14223334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com