Еще одна возможность, которая полезна, если у вас много строк с одинаковым значением v_key.
Во-первых, убедитесь, что для X существует строка. Если она не найдена, то не нужно продолжать.
Рассчитать следующее возможное значение (переменная x_next_value) искомого значения (переменная X). Примеры:
- Если X - целое число, просто выполните поиск X + 1. Пример: для значения 5
x_next_value
будет равно 6.
- Если X - это символы (C или строка), тогда получите номер последнего символа (
cl_abap_conv_**out**_ce=>uccpi
), добавьте 1 и обновите последний символ (cl_abap_conv_**in**_ce=>uccpi
).
- Такая же логика для других типов X.
Убедитесь, что ваша таблица отсортирована (предпочтительнее, чем объявленная таблица sorted table of ... with non-unique key v_key
)
Затем сделайте READ TABLE itab WITH KEY v_key = x_next_value
.
Важно : даже если строка не найдена, SY-TABIX будет установлен на номер следующей строки после всех строк, имеющих v_key = x
(ср. ABAP документация READ TABLE - возможно значения для SY-SUBRC и SY-TABIX )
Псевдокод:
READ TABLE ... WITH KEY v_key = x_next_value.
" eventually BINARY SEARCH if itab is STANDARD instead of SORTED
CASE sy-subrc.
WHEN 0.
last_tabix_of_x = sy-tabix.
WHEN 4.
last_tabix_of_x = sy-tabix - 1.
WHEN 8.
last_tabix_of_x = lines( itab ).
ENDCASE.
Примечание: необходимо ровно два READ TABLE
, чтобы найти последний соответствующий результат.