Страница 1 из 1
Предикат like
Добавлено: 31 май 2010, 11:03
Senkrid
Обьясните- что делаю не так?
Задача: найти вхождение в строку
IncludeCode. Для примера шаблон =
'%60%'
Код: Выделить всё
const
...
IncludeCode = '07,08,10,15,20,21,23,24,25,26,29,41,60,62,76,79,84,91,94,97,98,99';
...
cmInit:
{
Message(IncludeCode like '%60%')
}
...
Выдает
False постоянно, кроме случая, когда шаблон =
'07%' или использовании
'_'(при этом явно же указываю номер позиции количеством самих _)
v.5.4.30
Добавлено: 31 май 2010, 11:34
KATZ
Всё правильно делаете, просто LIKE своеобразно работает. Шестерка первый раз встречается в числе 26, предикат на нем и спотыкается. Уберёте первую шестерку - получите TRUE. Надежнее пользоваться функцией POS.
Добавлено: 31 май 2010, 11:40
Senkrid
Всё правильно делаете, просто LIKE своеобразно работает. Шестерка первый раз встречается в числе 26, предикат на нем и спотыкается. Уберёте первую шестерку - получите TRUE. Надежнее пользоваться функцией POS.
Как раз сейчас нашел
Pos и
InStr (одинаковые функции но с разными именами

Кто знает - зачем?)
Спасибо,KATZ

Буду знать про такую особенность
Добавлено: 01 июн 2010, 10:20
LaaLaa
Рекомендую использовать функцию
MatchesMask
Код: Выделить всё
function MatchesMask(Filename: string, Mask: string): Boolean; external 'G_TXO.DLL';
const
...
IncludeCode = '07,08,10,15,20,21,23,24,25,26,29,41,60,62,76,79,84,91,94,97,98,99';
...
cmInit:
{
Message(MatchesMask(IncludeCode, '*60*');
}
Добавлено: 01 июн 2010, 10:26
LaaLaa
Из документации по ТХО API
Код: Выделить всё
3.4.5. Прочие полезные функции
3.4.5.1. Проверить, удовлетворяет ли строка (Str) маске (Mask)
function MatchesMask(Str, Mask : string): Boolean;
Маски могут включать обычные символы (буквы и цифры), а также специальные выражения:
* или # любое количество символов;
? один любой символ;
[cx~z] один любой символ из перечисленных в квадратных скобках;
[!cx~z] один любой символ кроме тех, что указаны в квадратных скобках.
Допускаются и отдельные символы, и их диапазоны. Диапазоны обозначаются символом '~'.
Например, коды объектов 1010, 101000, 101001, 1010A, 1010B могут быть выбраны с помощью маски 1010#.
Маска #1010# выберет и 1010, и A1010A, и B1010B.
Маска [ABX~Z]#1010 может выбрать и Alpha1010, и Beta1010, и Xsystem1010, и Ysystem1010, и Zsystem1010.
В фильтрах можно задать несколько масок, разделенных точкой с запятой. Например, чтобы выбрать все объекты серии 1010, 1020 и 1030, вы можете ввести маску #1010#;#1020#;#1030#.
В фильтрах также можно указать маски исключения. Маска исключения — это одна или несколько масок, которым не должны соответствовать коды требуемых объектов, она отделяется от основной маски символом | (вертикальная черта).
Примеры использования масок исключения:
1. 1010#
Все объекты с кодами, начинающимися на 1010.
2. #|1010#;1020#
Все объекты, кроме тех, у которых коды начинаются на 1010 и 1020.
3. #|
Все объекты, кроме тех, у которых код пустой.
4. #|1010#|1020#
Ошибка — спецсимвол | не может встречаться более одного раза.
5. |1010#
Обрабатывается как #|1010#
Через точку с запятой перечисляются маски, а при помощи символа '|' маски-включения отделяются от масок-исключения.
Более подробное описание синтаксиса маски смотрите в документации по модулю ХозОперации.
Re:
Добавлено: 15 июн 2010, 08:36
Senkrid
LaaLaa, спасибо! Учту и это