1

入力: WS 変数に「345xABCx12」が含まれています

コード: IF WS-Variable 文字列に 'ABC' が含まれている 表示 ' SKIP!!!' それ以外の場合は、何かを実行します。

If variable contains 'abc'
  display skipped
else
  process-para
end if.
4

2 に答える 2

1

次のようなことを試しましたか:?

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'
于 2013-10-16T19:30:11.313 に答える