專業(yè)攝影網站杭州網站優(yōu)化服務
獲取索引值
在ABAP中,如果需要獲取一個內表中某條記錄的索引(index),可以使用?READ?TABLE?語句。在?READ?TABLE?語句后面的?WITH?KEY?子句可以指定搜索條件,如果找到了匹配的記錄,系統(tǒng)字段?SY-TABIX?將保存被找到的記錄的索引。
例子:
DATA:?lt_table?TYPE?TABLE?OF?TYPE_NAME,ls_table?TYPE?TYPE_NAME,lv_index?TYPE?sy-tabix.READ?TABLE?lt_table?WITH?KEY?field?=?value?TRANSPORTING?NO?FIELDS.IF?sy-subrc?=?0.lv_index?=?sy-tabix.?"這里的lv_index就是你想要獲取的索引.
ELSE."未查找到相應的記錄.
ENDIF.
在這個例子中,程序會在表?lt_table?中查找字段?field?的值等于?value?的行。如果找到,那么?sy-tabix?就會自動被填充為對應行的索引,否則?sy-subrc?不等于0,表示未能找到對應的行。
實際使用時注意替換?TYPE_NAME,?field?和?value?為你實際的類型和鍵值?
匹配到多行的情況
當使用?READ?TABLE?WITH?KEY讀取內部表中的行時,如果匹配到多行READ?TABLE?語句將只返回第一個匹配到的行的索引。
例子:?
DATA:?lt_material?TYPE?TABLE?OF?mara,ls_material?TYPE?mara.READ?TABLE?lt_material?WITH?KEY?matnr?=?'some_material_number'.IF?sy-subrc?=?0."?會保存第一個匹配行的索引WRITE:?/?'Index?of?the?first?match:',?sy-tabix.
ELSE.WRITE:?/?'No?match?found'.
ENDIF.
在上述代碼中,如果存在多個?some_material_number'的記錄,READ?TABLE?語句只會返回第一個匹配記錄的索引。
處理匹配到的行數據
如果需要處理所有匹配的行,應該使用?LOOP?AT?與?WHERE?子句,如下:
LOOP?AT?lt_material?INTO?ls_material?WHERE?matnr?=?'some_material_number'."?ls_material?現(xiàn)在包含了一行匹配的記錄,你可以在這里處理它
ENDLOOP.
在這個?LOOP?中,每個'some_material_number?的記錄都會被處理。注意需要在循環(huán)體內對每個匹配的記錄進行處理。