轉帖自:http://blog.csdn.net/animalbe/article/details/5514490
用自訂關鍵字讀取單行
要從有自訂關鍵字的內表中讀取單行,請使用READ語句的WITH KEY選項,用法如下:
文法
READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINARY SEARCH].
用 INTO 選項可以指定目的地區域 。如果表格有表頭行,則可以忽略 INTO 選項。這樣,表格工作區域就成了目的地區域。
系統讀取 <itab> 中匹配 <key> 中所定義的關鍵字的第一個條目。關於二分法搜尋選項的詳細資料,參見二分法搜尋。
如果找到有適當關鍵字的條目,則將系統欄位 SY-SUBRC設定為0,並且SY-TABIX包含該行的索引。否則,將 SY-SUBRC設定為非0值 。
如下所述,可以定義多個關鍵字 <key>:
定義一系列關鍵字段
要定義自己的一系列關 鍵欄位,請使用 WITH KEY 選項,用法如下:
文法
....WITH KEY <k1> = <f1> ... <kn> = <fn> ...
自訂關鍵字包含表格組件 <k1>...<kn>。欄位 <f1>...<fn> 是關鍵字段的內容必須匹配的值。
如果 <fi> 的資料類型與資料類型 <ki> 不相容,則 <fi> 轉換為類型 <ki>。
可以用 (<ni>) 代替 <ki> 來即時設定關鍵字段。關鍵字段是欄位 <ni> 的內容。如果在運行時 <ni> 為空白,則系統忽略該關鍵字段。如果 <ni> 包含無效的組件名稱,則發生即時錯誤。
使用者可以為任何在關鍵字中使用的組件指定位移量和長度(參見指定資料對象的位移量)。
將整行定義為關鍵字
通過使用 WITH KEY 選項可將內表整行定義為其關鍵字 ,如下所示 :
文法
....WITH KEY = <value> ...
如果 <value> 的資料類型與表格行的資料類型不相容,則將 <value> 轉換為表格 行的資料類 型。
對於此類關鍵字,也可以選擇由某個基礎資料型別 (Elementary Data Type)或內表直接定義的,而不是由 段串直接定義的特定內表行。
將行首定義為關鍵字
要將內表的行首定義為關鍵字,請使用 WITH KEY 選項,用法如下:
文法
....WITH KEY <k> ...
系統將(左 對齊)的行首與 <k> 進行比較。 <k> 不能包含內表或包含內表的結構。與上面兩個選項不同之處在於用 <k> 的資料類型進行比較。
樣本:
DATA: BEGIN OF LINE,
COL1 TYPE C,
COL2 TYPE P DECIMALS 5,
COL3 TYPE I,
COL4 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 10 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SQRT( SY-INDEX ).
LINE-COL3 = SY-INDEX ** 2.
LINE-COL4 = SY-INDEX ** 3.
APPEND LINE TO ITAB.
ENDDO.
READ TABLE ITAB INTO LINE WITH KEY COL3 = 9 COL4 = 36.
WRITE: / SY-SUBRC, SY-TABIX.
READ TABLE ITAB INTO LINE WITH KEY COL3 = 9 COL4 = 27.
WRITE: / SY-SUBRC, SY-TABIX.
READ TABLE ITAB INTO LINE WITH KEY '2'.
WRITE: / SY-SUBRC, SY-TABIX.
其輸出為:
4 0
0 3
0 2
在此,建立包含四列的內表。對錶格的10行進行填充之後,用自訂關鍵字讀取單行。有關鍵字段 COL3、COL4 的自訂序列的第一個 READ 語句失敗,第二個 READ 語句找到索引為 3 的行。第三 個 READ 語句搜尋以 “2”開始的表格行並找到索引為 2的行。顯示主要步驟:
樣本:
DATA ITAB TYPE I OCCURS 10,
DATA SQUARE TYPE I.
DO 30 TIMES.
SQUARE = SY-INDEX ** 2.
APPEND SQUARE TO ITAB.
ENDDO.
READ TABLE ITAB INTO SQUARE WITH KEY = 25.
WRITE: SY-SUBRC, SY-TABIX.
其輸出為:
0 5
在此建立包含基本類型 I 行的內表。 填充完表格之後,讀取值為 25 且索引為 5 的行。
二分法搜尋
用關鍵字讀取單行時,可以執行二分法搜尋以代替標準順序搜尋。為此,請使用READ語句的二分法搜尋選項。
文法
READ TABLE <itab> ..... BINARY SEARCH.
如果使用二分法搜尋選項,則必須按關鍵字 中指定的次 序對內表進 行排序。
如果系統找 到匹配指定 關鍵字的多 行,則讀取 索引最低的 行。
二分法搜尋 比線性搜尋 要快。因此 ,應儘可能 將內表排序 並且使用 二分法搜尋 選項。
指定資料對象的位移量
在 ABAP/4 中,可以在 所有處理數 據對象的語句中指定基本資料對象的位移量值 。
為此,請在語句中指定 資料對象名稱,如下所 示:
文法
<f>[+<o>][(<l>)]
對欄位 <f> 中從 <o>+1 開始且長度 <l> 的部分執行該語句的操作。
如果未指定長度 <l>,則 對該欄位 <o> 和結尾之間的所有位置進行處理。
轉帖自:http://blog.csdn.net/animalbe/article/details/5514490
用自訂關鍵字讀取單行
要從有自訂關鍵字的內表中讀取單行,請使用READ語句的WITH KEY選項,用法如下:
文法
READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINARY SEARCH].
用 INTO 選項可以指定目的地區域 。如果表格有表頭行,則可以忽略 INTO 選項。這樣,表格工作區域就成了目的地區域。
系統讀取 <itab> 中匹配 <key> 中所定義的關鍵字的第一個條目。關於二分法搜尋選項的詳細資料,參見二分法搜尋。
如果找到有適當關鍵字的條目,則將系統欄位 SY-SUBRC設定為0,並且SY-TABIX包含該行的索引。否則,將 SY-SUBRC設定為非0值 。
如下所述,可以定義多個關鍵字 <key>:
定義一系列關鍵字段
要定義自己的一系列關 鍵欄位,請使用 WITH KEY 選項,用法如下:
文法
....WITH KEY <k1> = <f1> ... <kn> = <fn> ...
自訂關鍵字包含表格組件 <k1>...<kn>。欄位 <f1>...<fn> 是關鍵字段的內容必須匹配的值。
如果 <fi> 的資料類型與資料類型 <ki> 不相容,則 <fi> 轉換為類型 <ki>。
可以用 (<ni>) 代替 <ki> 來即時設定關鍵字段。關鍵字段是欄位 <ni> 的內容。如果在運行時 <ni> 為空白,則系統忽略該關鍵字段。如果 <ni> 包含無效的組件名稱,則發生即時錯誤。
使用者可以為任何在關鍵字中使用的組件指定位移量和長度(參見指定資料對象的位移量)。
將整行定義為關鍵字
通過使用 WITH KEY 選項可將內表整行定義為其關鍵字 ,如下所示 :
文法
....WITH KEY = <value> ...
如果 <value> 的資料類型與表格行的資料類型不相容,則將 <value> 轉換為表格 行的資料類 型。
對於此類關鍵字,也可以選擇由某個基礎資料型別 (Elementary Data Type)或內表直接定義的,而不是由 段串直接定義的特定內表行。
將行首定義為關鍵字
要將內表的行首定義為關鍵字,請使用 WITH KEY 選項,用法如下:
文法
....WITH KEY <k> ...
系統將(左 對齊)的行首與 <k> 進行比較。 <k> 不能包含內表或包含內表的結構。與上面兩個選項不同之處在於用 <k> 的資料類型進行比較。
樣本:
DATA: BEGIN OF LINE,
COL1 TYPE C,
COL2 TYPE P DECIMALS 5,
COL3 TYPE I,
COL4 TYPE I,
END OF LINE.
DATA ITAB LIKE LINE OCCURS 10.
DO 10 TIMES.
LINE-COL1 = SY-INDEX.
LINE-COL2 = SQRT( SY-INDEX ).
LINE-COL3 = SY-INDEX ** 2.
LINE-COL4 = SY-INDEX ** 3.
APPEND LINE TO ITAB.
ENDDO.
READ TABLE ITAB INTO LINE WITH KEY COL3 = 9 COL4 = 36.
WRITE: / SY-SUBRC, SY-TABIX.
READ TABLE ITAB INTO LINE WITH KEY COL3 = 9 COL4 = 27.
WRITE: / SY-SUBRC, SY-TABIX.
READ TABLE ITAB INTO LINE WITH KEY '2'.
WRITE: / SY-SUBRC, SY-TABIX.
其輸出為:
4 0
0 3
0 2
在此,建立包含四列的內表。對錶格的10行進行填充之後,用自訂關鍵字讀取單行。有關鍵字段 COL3、COL4 的自訂序列的第一個 READ 語句失敗,第二個 READ 語句找到索引為 3 的行。第三 個 READ 語句搜尋以 “2”開始的表格行並找到索引為 2的行。顯示主要步驟:
樣本:
DATA ITAB TYPE I OCCURS 10,
DATA SQUARE TYPE I.
DO 30 TIMES.
SQUARE = SY-INDEX ** 2.
APPEND SQUARE TO ITAB.
ENDDO.
READ TABLE ITAB INTO SQUARE WITH KEY = 25.
WRITE: SY-SUBRC, SY-TABIX.
其輸出為:
0 5
在此建立包含基本類型 I 行的內表。 填充完表格之後,讀取值為 25 且索引為 5 的行。
二分法搜尋
用關鍵字讀取單行時,可以執行二分法搜尋以代替標準順序搜尋。為此,請使用READ語句的二分法搜尋選項。
文法
READ TABLE <itab> ..... BINARY SEARCH.
如果使用二分法搜尋選項,則必須按關鍵字 中指定的次 序對內表進 行排序。
如果系統找 到匹配指定 關鍵字的多 行,則讀取 索引最低的 行。
二分法搜尋 比線性搜尋 要快。因此 ,應儘可能 將內表排序 並且使用 二分法搜尋 選項。
指定資料對象的位移量
在 ABAP/4 中,可以在 所有處理數 據對象的語句中指定基本資料對象的位移量值 。
為此,請在語句中指定 資料對象名稱,如下所 示:
文法
<f>[+<o>][(<l>)]
對欄位 <f> 中從 <o>+1 開始且長度 <l> 的部分執行該語句的操作。
如果未指定長度 <l>,則 對該欄位 <o> 和結尾之間的所有位置進行處理。