コンテンツフレーム起動

内部テーブルでの文字列の検索 文書を SAP ライブラリストラクチャに組み込む

索引テーブルの行内の文字列を検索するには、以下の命令を使用します。

SEARCH <itab> FOR <str> <options>.

この命令で、内部テーブル <itab> 内で 文字列 <str> が検索されます。検索に成功すると、SY-SUBRC 0 に設定され、SY-TABIX には文字列が検出されたテーブル行の索引が設定されます。SY-FDPOS には、その文字列のテーブル行でのオフセット位置が格納されます。検索に失敗した場合は、SY-SUBRC 4 に設定されます。

ユニコードシステムでは、内部テーブルの行データ型は文字型でなければなりません。ユニコード以外のシステムでは、行に数値または 16 進のコンポーネントを含めることもできます。

この命令では、実際の行データ型と関係なく、すべてのテーブル行が C 型の項目として処理されます。変換は行われません。検索字列 <str> には、項目での通常の文字列検索の場合と同じ書式を含めることができます。

内部テーブルでの検索のオプション(<options>) は、以下のとおりです。

        ABBREVIATED

テーブル <itab> で文字列 <str> を含む単語が検索されます。文字は他の文字によって区切ることができます。単語と文字列 <str> の最初の文字は、同じでなければなりません。

        STARTING AT <lin1>

テーブル <itab> の行 <lin 1> 以降で <str> が検索されます。<lin 1> には変数を指定することもできます。

        ENDING AT <lin2>

テーブル <itab> <lin 2> まで <str> が検索されます。<lin 2> には変数を指定することもできます。

        AND MARK

検索文字列が検出されると、その検索文字列のすべての文字 (ABBREVIATED を使用している場合は中間のすべての文字) が大文字に変換されます。

この命令は、索引テーブルにのみ使用することができます。ハッシュテーブルに使用できる同様の命令はありません。

例

REPORT demo_int_tables_search_index.

DATA: BEGIN OF line,
        index(4) TYPE c,
        text(8) TYPE c,
      END OF line.

DATA itab LIKE SORTED TABLE OF line WITH UNIQUE KEY index.

DATA num(2) TYPE n.

DO 10 TIMES.
   line-index = sy-index.
   num = sy-index.
   CONCATENATE 'string' num INTO line-text.
   APPEND line TO itab.
ENDDO.

SEARCH itab FOR 'string05' AND MARK.

WRITE: / '''string05'' found at line', (1) sy-tabix,
         'with offset', (1) sy-fdpos.

SKIP.

READ TABLE itab INTO line INDEX sy-tabix.
WRITE: / line-index, line-text.

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

'string05' found at line 5 with offset 4

5 STRING05

テーブル内で検出された文字列のオフセットは、I 型で 長さ 4 の最初のテーブル列の幅によって決まります。AND MARK オプションを指定すると、目的の行のテーブル内容が変更されます。

 

 

 

 

コンテンツフレーム終了