[ABAP學習筆記-4.22]READ語句相關

來源:互聯網
上載者:User

 

用自訂關鍵字讀取單行

 

要從有自訂關鍵字的內表中讀取單行,請使用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> 和結尾之間的所有位置進行處理。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.