string - 在 COBOL 中查找子字符串的索引

标签 string indexing substring cobol

我正在寻找字符串中出现指定子字符串的位置。

例如,在字符串“green eggs and ham”中查找子字符串“green”应该返回 1,但从“green eggs and green ham”中查找子字符串会返回 1 和 14。

我应该怎么做?

编辑 1:更改措辞,使位置从 1 开始,而不是 0。 编辑 2:我可以在以下代码段中找到作为 WS-POINTER 的第一个实例:

 MOVE 1 TO  WS-POINTER

 UNSTRING WS-STRING(1:WS-STRING-LEN)
  DELIMITED BY LT-MY-DELIMITER
  INTO WS-STRING-GARBAGE                             
  WITH POINTER WS-POINTER
 END-UNSTRING                   

最佳答案

AFAIK COBOL 没有在字符串中查找字符串位置的语句,因此需要手动完成。但是,COBOL 确实有一条语句可以计算字符串中字符串的出现次数: INSPECT string TALLYING counter FOR ALL 搜索字符串

这是一个在 OpenCOBOL 中运行的示例程序(请参阅 OpenCobol.org):

   IDENTIFICATION DIVISION.
   PROGRAM-ID. OCCURRENCES.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.

   DATA DIVISION.
   FILE SECTION.

   WORKING-STORAGE SECTION.
   01  TEST-STRING-1                    PIC X(30)
       VALUE 'green eggs and ham'.
   01  TEST-STRING-2                    PIC X(30)
       VALUE 'green eggs and green ham'.
   01  TEST-STRING                      PIC X(30).
   01  SEARCH-STRING                    PIC X(05)
       VALUE 'green'.
   01  MATCH-COUNT                      PIC 9.
   01  SEARCH-INDEX                     PIC 99.
   01  MATCH-POSITIONS.
       05  MATCH-POS                    PIC 99 OCCURS 9 TIMES.

   PROCEDURE DIVISION.
   MAIN.
       MOVE TEST-STRING-1 TO TEST-STRING
       PERFORM FIND-MATCHES

       MOVE TEST-STRING-2 TO TEST-STRING
       PERFORM FIND-MATCHES

       STOP RUN
       .

   FIND-MATCHES.
       MOVE ZERO TO MATCH-COUNT 
       INSPECT TEST-STRING TALLYING MATCH-COUNT
           FOR ALL SEARCH-STRING.
       DISPLAY 'FOUND ' MATCH-COUNT ' OCCURRENCE(S) OF '
           SEARCH-STRING ' IN:'
       DISPLAY TEST-STRING
       DISPLAY 'MATCHES FOUND AT POSITIONS: ' WITH NO ADVANCING
       PERFORM VARYING SEARCH-INDEX FROM 1 BY 1
           UNTIL SEARCH-INDEX = 30
           IF TEST-STRING (SEARCH-INDEX:5) = SEARCH-STRING
               DISPLAY SEARCH-INDEX ' ' WITH NO ADVANCING
       END-PERFORM
       DISPLAY ' '
       DISPLAY ' '
       .

关于string - 在 COBOL 中查找子字符串的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528208/

相关文章:

Python sqlite3 不使用带有 LIKE 的索引

r - 如何找出矩阵的多少行满足相当复杂的标准(在 R 中)?

javascript - 如何使用indexOf()来检查数组中的字符串是否部分匹配另一个数组中的字符串?

c - 在 C 中用分隔符拆分字符串

javascript - 在 Javascript 中添加多个变量以使用 RegEx 函数

python - 如何将变量的值放入字符串中(将其插入字符串中)?

java - 使用 java 将文本文件修剪到第一列

javascript - 如何按值从数组中删除项目但保持原始索引顺序?

java - 修复 ArrayList 中的 IndexOutOfBounds 异常

python - Python 中的连续子字符串