Разница между StrFind() и StrScan() в аксапте

Не редко нам приходится использовать StrFind и StrScan в повседневной работе. Но зачастую мы не обращаем внимание на детали, которые указаны в документации.

Главное отличие этих двух методов заключается в том, что

StrFind — ищет первое совпадение символа, указанного в параметрах.
Параметры:
1) Текст (в котом будет производиться поиск)
2) Символ/набор символов (Искомое значение)
3) Начальная позиция поиска, целое число (1 — соответствует началу строки)
4) Конечная позиция поиска, целое число 

int position = strFind("АБВГДЕЁЖЗИ", "кресло", 1, 10); // position = 6, это соответствует позиции буквы Е

position = strFind("АБВГДЕЁЖЗИкресло", "кресло", 1, 16); // также вернёт position = 6, это соответствует позиции буквы Е

position = strFind("ABCDEFGHIJ","KHD", 1, 10); // position = 4, это соответствует позиции буквы D 

 

StrScan — ищет первое совпадение текста, указанного в параметрах
Параметры:
1) Текст (в котом будет производиться поиск)
2) Текст (Искомое значение)
3) Начальная позиция поиска, целое число (1 — соответствует началу строки)
4) Конечная позиция поиска, целое число 

int position = strScan("АБВГДЕЁЖЗИ", "кресло", 1, 10); // position = 0

position = strScan("АБВГДЕЁЖЗИкресло", "кресло", 1, 12); // position = 11, это соответствует позиции буквы К

position = strScan("АБВГДЕЁЖЗИкресло", "кресло", 1, 10); // position = 0

position = strScan("АБВГДЕЁЖЗИкресло", "е", 1, 16); // position = 6, это соответствует позиции буквы E

position = strScan("АБВГДЕЁЖЗИкресло", "е", 16, -5); // position = 13. В этом случае поиск происходит справа-налево

Обратите внимание на 2 пример!, по-хорошему в этом случае AX должен был бы вернуть 0. Но он нашел совпадение слова целиком и начальная позиция совпадения находится в диапазоне поиска. Это может привести к неожиданным результатам в некоторых случаях разбора строк в вашем коде. Поэтому имейте ввиду такое странное поведение этой функции.
П.С.
тестировалось на AX4, за неимением на данный момент других версий АХ, могу лишь предположить, что Microsoft исправил недочет описанный выше.

Комментариев нет


Добавить комментарий