Оператор | Значение |
---|---|
CO | Contains Only: Истина, если операнд1 содержит только символы из операнда2. Оператор регистрозависимый. Операнды чувствительны к ведущим/последним пробелам. Если операнд2 типа string и initial, то результатом логического выражения будет ложь, за исключением тех случаев, когда операнд1 тоже типа string и initial. В таком случае результатом логического выражения всегда будет истина. Если логическое выражение ложь, то sy-fdpos будет содержать смещение первого символа в операнде1, которого нет в операнде2. Иначе, sy-fdpos будет содержать длину операнда1. |
CA | Contains Any: Истина, Если операнд1 содержит хотя бы один символ из операнда2. Оператор регистрозависимый. Операнды чувствительны к ведущим/последним пробелам. Если операнд1 или операнд2 типа string и initial, то результатом логического выражения всегда будет ложь. Если результат сравнения положительный, то sy-fdpos будет содержать смещение первого символа в операнде1, который содержит операнд2. Иначе, sy-fdpos будет содержать длину операнда1. |
CS | Contains String: Истина, если содержимое операнда2 содержится в операнде1. Оператор регистронезависимый. Операнды чувствительны к ведущим пробелам. Если операнд1 типа string и initial, или типа C и содержит только пробельные символы, результатом логического выражения будет ложь, за исключением когда операнд2 также типа string и initial, или типа C и содержит только пробельные символы. В этом случае результатом логического выражения будет истина. Если выражение истина, то sy-fdpos будет содержать смещение операнда2 в операнде1. Если результатом сравнения будет ложь, то sy-fdpos будет содержать длину операнда1. |
CP | Covers Pattern: Истина, если содержимое операнда2 удовлетворяет шаблону операнда1. Операнд2 может содержать шаблонные символы: «*» — любая строка и «+» — любой символ. Оператор не чувствителен к регистру. Операнды чувствительны к ведущим пробелам. Если результат сравнения положительный, то sy-fdpos будет содержать смещение операнда2. Иначе, sy-fdpos будет содержать длину операнда1. Для поиска шаблонных символов их необходимо экранировать путем добавления в операнд2 символа «#» перед требуемым символом. Экранированные символы в операнде2 чувствительны к регистру. |
CN | Contains Not Only: Эквивалент операнд1 NOT CO операнд2. |
NA | Contains Not Any: Эквивалент операнд1 NOT CA операнд2. |
NS | Contains No String: Эквивалент операнд1 NOT CS операнд2. |
NP | No Pattern: Эквивалент операнд1 NOT CP операнд2. |
Примечание
- Операторы CP и NP интерпретируют несколько подряд идущих символов «*» как один символ «*». Символ «+» не находит пробелы.
- Операнды бинарных типов интерпретируются как строка с юникодами.
- Операторы сравнения могут быть заменены предикатными функциями.
- Оператор CS может работать медленнее чем оператор FIND или функция find.
Применение CO
Оператор CO обычно применяют в случаях, когда нужно проверить есть ли в строке недопустимые символы. При использовании символьных литералов следует помнить что переменная может содержать пробелы на конце. Пример ниже демонстрирует проверку, является ли строка числом.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
*&---------------------------------------------------------------------* *& Report ZCMP *& Тестирование операторов сравнения *&---------------------------------------------------------------------* *& Операторы для сравнения строк *& http://abap4.ru/?p=328 *&---------------------------------------------------------------------* REPORT zcmp. START-OF-SELECTION. PERFORM main. FORM main. DATA lv_char TYPE char10. DATA lv_string TYPE string. lv_char = '2018'. lv_string = lv_char. IF lv_char CO '0123456789'. WRITE: / |CHAR10: { lv_char } is numeric. SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |CHAR10: { lv_char } is not numeric. SY-FDPOS = { sy-fdpos }|. ENDIF. IF lv_char CO '0 123456789'. WRITE: / |CHAR10: { lv_char } is numeric + space. SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |CHAR10: { lv_char } is not numeric + space. SY-FDPOS = { sy-fdpos }|. ENDIF. IF lv_string CO '0123456789'. WRITE: / |STRING: { lv_string } is numeric. SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |STRING: { lv_string } is not numeric. SY-FDPOS = { sy-fdpos }|. ENDIF. ENDFORM. |
Результат работы программы
Применение CA
Пример ниже демонстрирует проверку наличия цифры в строке
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
*&---------------------------------------------------------------------* *& Report ZCMP *& Тестирование операторов сравнения *&---------------------------------------------------------------------* *& Операторы для сравнения строк *& http://abap4.ru/?p=328 *&---------------------------------------------------------------------* REPORT zcmp. START-OF-SELECTION. PERFORM main. FORM main. DATA lv_char TYPE char50. lv_char = 'ABAP is great language'. IF lv_char CA '0123456789'. WRITE: / |"{ lv_char }" has numeric. SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |"{ lv_char }" has not numeric. SY-FDPOS = { sy-fdpos }|. ENDIF. lv_char = 'ABAP4 is great language'. IF lv_char CA '0123456789'. WRITE: / |"{ lv_char }" has numeric. SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |"{ lv_char }" has not numeric. SY-FDPOS = { sy-fdpos }|. ENDIF. ENDFORM. |
Результат работы программы
Применение CS
Оператор CS применяется для поиска подстроки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
*&---------------------------------------------------------------------* *& Report ZCMP *& Тестирование операторов сравнения *&---------------------------------------------------------------------* *& Операторы для сравнения строк *& http://abap4.ru/?p=328 *&---------------------------------------------------------------------* REPORT zcmp. START-OF-SELECTION. PERFORM main. FORM main. DATA lv_char TYPE char50. DATA lv_text TYPE char50. lv_text = 'ABAP is great language'. lv_char = 'is'. IF lv_text CS lv_char. WRITE: / |"{ lv_char }" found in "{ lv_text }". SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |"{ lv_char }" not found in "{ lv_text }". SY-FDPOS = { sy-fdpos }|. ENDIF. lv_char = 'has'. IF lv_text CS lv_char. WRITE: / |"{ lv_char }" found in "{ lv_text }". SY-FDPOS = { sy-fdpos }|. ELSE. WRITE: / |"{ lv_char }" not found in "{ lv_text }". SY-FDPOS = { sy-fdpos }|. ENDIF. ENDFORM. |
Результат работы программы
Оператор CP
Оператор шаблонного поиска CP проверяет, соответствует ли строка определенному шаблону
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
*&---------------------------------------------------------------------* *& Report ZCMP *& Тестирование операторов сравнения *&---------------------------------------------------------------------* *& Операторы для сравнения строк *& http://abap4.ru/?p=328 *&---------------------------------------------------------------------* REPORT zcmp. START-OF-SELECTION. PERFORM main. FORM main. DATA lv_text TYPE char50. lv_text = 'This is <i>italic</i>!'. IF lv_text CP '*<*>*'. WRITE |"{ lv_text }" contains HTML tag at { sy-fdpos }|. ENDIF. ENDFORM. |
Результат работы программы
Описание работы операторов взято из справки SAP.
Качественное изложение материала, читать легко и приятно.
Привет, а не в курсе почему
‘BD’ CO ‘ABCD’ = true
, а ‘BD’ CO ‘ABCDE’ = false ?