入力: WS 変数に「345xABCx12」が含まれています
コード: IF WS-Variable 文字列に 'ABC' が含まれている 表示 ' SKIP!!!' それ以外の場合は、何かを実行します。
If variable contains 'abc'
display skipped
else
process-para
end if.
次のようなことを試しましたか:?
If variable equal to 'abc'
display "skipped"
else
perform process-para
end-if
これは、変数が PIC XXX または X(3) として定義されていることを前提としています。
それが適切でない場合は、より完全な説明、サンプル入力、予想される出力、および試したことで質問を更新してください。
ここで、データ内の可変位置で「abc」を探していることがわかりました。
それにはいくつかの方法があります。
最も簡単なのは
INSPECT field-you-want-to-look-at
TALLYING a-count
FOR ALL value-you-want-to-search-for
a-count は BINARY PIC 9(4) として定義できます。検索したい値を PIC XXX VALUE 'abc' として。
INSPECT の前にゼロを a-count に移動します。
INSPECT の後で、a-count をテストできます。これにより、検索したい値が、調べたいフィールドに何回出現したかがわかります。
リテラル ('abc') の代わりにデータ定義 (PIC XXX) を使用する理由は、保守と理解を容易にするためです。プログラム内で 'abc' が必要な場所が複数ある場合があり、両方の場所で同じことを意味する場合もあれば、ある場所で 1 つのことを別の場所で別のことを意味する場合もあります。定義からのデータ名を使用して、各インスタンスで「abc」が何を意味するかを説明できます。'abc' (または 'abc's の 1 つ) の値を変更する必要がある場合、変更する必要がある場所は 1 つだけです - 作業用ストレージ内です。
(および COOLGEN 参照のためにメインフレームで Enterprise COBOL を想定している場合) コンパイラ オプション OPT(STD) または OPT(FULL) を使用する場合、参照されるが決して「ターゲット」にはならないデータ名、つまり定数を持ちます。値は、定数として扱われます。したがって、名前付き定数も取得します。
INSPECT FLIGHTPLAN-REFERENCE
TALLYING NO-OF-ENTRIES-TO-EU-AIRSPACE
FOR ALL EU-FLIGHTPLAN-CODE
よりもはるかに理解しやすい
INSPECT VAR1 TALLYING A-COUNT FOR ALL 'abc'