Есть ли оператор сравнения Like в языке Basic?

Автор eeigor, 23 января 2021, 21:55

0 Пользователи и 1 гость просматривают эту тему.

eeigor

Похоже, что нет... Как сравнивать строки?
>>> InStr() ?
>>> StrComp() ?
+
Option VBASupport 1
Option Compatible
>>> InStrRev()
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#1
Добрый день! Четыре в одном. :)

1. Like - оператор невидимка. В текущей документации его нет (или тщательно спрятан). Насколько точно соотвествует спецификации Excel - предмет отдельного исследования.

2. Instr. При регистронезависимом поиске некорректно работает с нелатинскими буквами.

3. Strcomp. В текущей версии замечаний нет. Однако параметр Compare там почему-то не такой, как в аналогичных функциях (и в Excel). При переносе из/в Excel крайне неудобно.

4. InStrRev. Работает только при VBASupport 1. Реализация функции не соответствует документации - параметр Compare по умолчанию 0, а не 1. При регистронезависимом поиске некорректно работает с нелатинскими буквами.

Про баг в InStr написал, про InstrRev сообщу, когда выйдет версия 7.1.

Как временное решение - при регистронезависимом поиске использую конструкции вида:
 
  Instr(1, lcase(text1), lcase(text2), 0)


Владимир.

mikekaganski

Писать надо про все четыре. Четыре отдельных бага. Один - про отсутствие справки, один - про две функции, не сравнивающие нелатинские буквы, и два - про несоответствие в двух функциях параметров (по крайней мере при VBASupport они должны соответствовать).

Когда сообщать - Вам решать. После выхода 7.1 - ок. Главное - не потерять баги.
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от 24 января 2021, 15:51Главное - не потерять баги

Здравствуйте, Михаил! Куда они (баги) денутся? Если, конечно, Вы их не исправите. :)
Владимир.

eeigor

#4
Цитата: sokol92 от 24 января 2021, 14:22Like - оператор невидимка.
Вот это да!!
Like: Проверил - работает! Никогда б не догадался, ибо прошерстил всю документацию (как болван, нет чтобы попробовать...). И это без всяких опций совместимости с VBA.
Ставлю себе "плюсик" за поставленный вопрос.
Остаётся решить: использовать или не использовать.
@sokol92, спасибо за обзор!

UPD:
На "радостях" бросился проверять работу оператора "In"... Ан нет, не работает.  :(
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

В VBA оператора "In" никогда не было, это из других языков (SQL, ...).
Владимир.

Sting

Цитата: sokol92 от 24 января 2021, 14:221. Like - оператор невидимка. В текущей документации его нет (или тщательно спрятан). Насколько точно соотвествует спецификации Excel - предмет отдельного исследования.

Я заметил странный глюк оператора Like. Если переменная типа String содержит символы переноса строки, то любые шаблоны начинают работать не корректно. И Like выдает в любом случае false, даже если присутствуют совпадения по шаблону.

sokol92

Да, интересно, похоже это касается наличия в проверяемой строке символов с кодами U+000A (перевод строки),
U+000B, U+000C, U+000D.
Владимир.

mikekaganski

Да. Like реализован через перевод шаблона Like в регулярное выражение; и это выражение обрамлено ^ и $ - а они реагируют на строки внутри текста.

Нужен баг. ^ нужно поменять на \A, а $ - на \z.
С уважением,
Михаил Каганский

sokol92

Владимир.

sokol92

Владимир.

Massaraksh7

Цитата: sokol92 от 24 января 2021, 14:222. Instr. При регистронезависимом поиске некорректно работает с нелатинскими буквами.
Исправили? А то я активно с ней работаю.

economist

Регэкспы ещё и ё могут не считать за диапазон А-я. Ё-мобиль не взлетел потому что его не смогли найти инвесторы. В поиске.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

mikekaganski

Цитата: economist от 26 мая 2024, 08:30Регэкспы ещё и ё могут не считать за диапазон А-я.

И правда могут. Но как это относится к вопросу?
С уважением,
Михаил Каганский

Massaraksh7

Цитата: Massaraksh7 от 26 мая 2024, 01:37А то я активно с ней работаю.
Уточню. Я не использую нелатинские символы в строке, которую ищу. Но они, естественно, есть в строке, где ищу.