コンテンツフレーム起動

内部テーブルの比較 文書を SAP ライブラリストラクチャに組み込む

他のデータオブジェクトと同様に、内部テーブルも論理式のオペランドとして使用することができます。

.... <itab1> <operator> <itab2> ...

<operator> には、データ型の比較の表に記載されているすべての演算子を使用することができます (EQ=NE<>><GE>=LE<=GT>LT<)

ヘッダ行のある内部テーブルを使用している場合は、ヘッダ行とテーブル本体の名前は同じであるということに注意してください。比較でテーブル本体をアドレス指定する場合は、テーブル名の後ろに 2 つの角括弧 ([ ]) を記述してください。

内部テーブルの比較の第一の基準は、テーブルに含まれている行の数です。つまり、含まれている行が多い内部テーブルのほうが大きいことになります。2 つの内部テーブルに含まれている行の数が同じである場合は、行単位、つまりコンポーネント単位で比較されます。テーブル行のコンポーネント自体が内部テーブルである場合は、それらの内部テーブルが繰り返し比較されます。等しくないコンポーネントがないか内部テーブルを調べている場合、等しくない最初のコンポーネントの組み合わせが検出されると、比較は停止され、それに対応する結果が返されます。

 例

DATA: BEGIN OF LINE,
        COL1 TYPE I,
        COL2 TYPE I,
      END OF LINE.

DATA: ITAB LIKE TABLE OF LINE,
      JTAB LIKE TABLE OF LINE.

DO 3 TIMES.
  LINE-COL1 = SY-INDEX.
  LINE-COL2 = SY-INDEX ** 2.
  APPEND LINE TO ITAB.

ENDDO.

MOVE ITAB TO JTAB.

LINE-COL1 = 10. LINE-COL2 = 20.
APPEND LINE TO ITAB.

IF ITAB GT JTAB.
  WRITE / 'ITAB GT JTAB'.
ENDIF.

APPEND LINE TO JTAB.

IF ITAB EQ JTAB.
  WRITE / 'ITAB EQ JTAB'.
ENDIF.

LINE-COL1 = 30. LINE-COL2 = 80.
APPEND LINE TO ITAB.

IF JTAB LE ITAB.
  WRITE / 'JTAB LE ITAB'.
ENDIF.

LINE-COL1 = 50. LINE-COL2 = 60.
APPEND LINE TO JTAB.

IF ITAB NE JTAB.
  WRITE / 'ITAB NE JTAB'.
ENDIF.

IF ITAB LT JTAB.
  WRITE / 'ITAB LT JTAB'.
ENDIF.

出力は以下のようになります。

ITAB GT JTAB

ITAB EQ JTAB

JTAB LE ITAB

ITAB NE JTAB

ITAB LT JTAB

この例では、2 つの標準テーブル、ITAB JTAB が作成されます。ITAB 3 つの行が書き込まれ、JTAB にコピーされます。次に、ITAB に別の 1 行がアペンドされ、最初の論理式によって ITAB JTAB より大きいかどうかが調べら れます。JTAB に同じ行がアペンドされたあと、2 番目の論理式によって両方のテーブルが等しいかどうかが調べられます。次に、ITAB に別の 1 行がアペンドされ、3 番目の論理式によって JTAB ITAB より小さいか、または等しいかどうかが調べられます。その後、別の 1 行が JTAB にアペンドされます。その行の内容は、ITAB の最後の行の内容と等しくありません。次の論理式によって、ITAB JTAB と等しくないかどうかが調べられます。ITAB JTAB で内容が異なる最初のテーブル項目は、テーブルの最後の行にある COL1 です。値は、ITAB では 30JTAB では 50 です。したがって、最後の論理式で、ITAB JTAB より小さいという結果が返されます。

 

 

 

 

コンテンツフレーム終了