TELON/COBOL atm を使用しています。文字列から単語を抽出するアルゴリズムが必要です。検索してみましたが、似たようなものは見つかりませんでした。
とにかく、アルゴリズムは単語を抽出し、スペースを無視する必要があります。ここに私がこれまでに持っているものがあります(e構文に慣れていない人のためにコメントを入れました)
WS-STRING は入力文字列です
WS-WORD-LEN は、抽出する単語の長さです
WS-LST-WORD-P は、抽出する現在の単語の開始位置です (文字列内)。
WS-SUB1 はループ インデックスです。
PERFORM TEST BEFORE
VARYING WS-SUB1 FROM 1 BY 1
UNTIL WS-SUB1 > WS-STRING-LEN //loop for each char in the string, add 1 to WS-SUB1 in each itiaration
EVALUATE TRUE
WHEN WS-STRING(WS-SUB1:1) = SPACES //if the current char is a space
MOVE WS-SUB1 TO WS-SUB1-FRD
ADD 1 TO WS-SUB1-FRD
IF WS-STRING(WS-SUB1-FRD:1) = SPACES //Checks to see if the next char is a space
ADD 1 TO WS-LST-WORD-P
ELSE
MOVE WS-STRING(WS-LST-WORD-P:WS-WORD-LEN) //Substing "WS-WORD-LEN" many char from "WS-STRING" starting at "WS-LST-WORD-P" into "WS-WORD-OUT"
TO WS-WORD-OUT
ADD 1 TO WS-COUNT(2)
PERFORM Z-400-OUTPUT-WORD //This outputs "WS-WORD-OUT" to a file.
MOVE WS-SUB1 TO WS-LST-WORD-P
MOVE 1 TO WS-WORD-LEN
END-IF
WHEN OTHER
ADD 1 TO WS-WORD-LEN
END-EVALUATE
END-PERFORM
MOVE 1 TO WS-LST-WORD-P
このアルゴリズムは機能しますが、出力の一部が最初/最後でつなぎ合わされます。ここで何が問題なのか、またはより良いものを提案するアイデアはありますか?