Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

6 Март 2021, 01:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Ошибка в функции Instr при регистронезависимом поиске  (Прочитано 492 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 308


WWW
« Стартовое сообщение: 22 Январь 2021, 20:59 »

Сообщил о баге.

Код:
Sub TestInstrFunction()
  MsgBox Instr(1, "Ш", "ш", 1)
End Sub

Возвращает 0 вместо 1. Для латинских букв все нормально.
Записан

Владимир.
economist
Форумчанин
***
Offline Offline

Сообщений: 1 394


« Ответ #1: 24 Январь 2021, 15:21 »

Корнями проблема, кмк, уходит в Windows в системные функции преобразования регистра.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 308


WWW
« Ответ #2: 24 Январь 2021, 15:27 »

Не все беды от Билла. Улыбка
Юникод появился в 1991 году.
Записан

Владимир.
economist
Форумчанин
***
Offline Offline

Сообщений: 1 394


« Ответ #3: 25 Январь 2021, 08:41 »

Дело, думаю, не в юникоде, а в том что все не ASCII-ENG символы (т.е. все русские буквы в т.ч.) - функция Windows tolower() оставляет нетронутыми. Проблема также хорошо известна в SQLite, где есть три варианта решения.

В LO Basic решение - приводить к одному регистру, благо тут это работает т.к. реализовано по-своему:
Код:
Sub TestInstrFunction()
  MsgBox Instr(1, UСase("Ш"), UСase("ш"), 1)
End Sub
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 308


WWW
« Ответ #4: 25 Январь 2021, 15:19 »

 Баг опубликован, и тот, кто его исправит, вряд ли нуждается в наших подсказках. Улыбка

MS Windows не при чем. Баг есть и в Linux, например. Причина - в использовании функции toAsciiUpperCase, которая "знает" только латынь. Если говорить только о Basic, то кроме упомянутой InStr этой же болезнью заражены InStrRev и StrConv (этой функции нет в документации, но она реализована). Об этих багах я напишу после выхода версии 7.1. 
Записан

Владимир.
eeigor
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
***
Online Online

Пол: Мужской
Сообщений: 380



« Ответ #5: 25 Январь 2021, 15:38 »

Оффтоп
Не пробовал, кто знает навскидку (если знает):
если объекту TextSearch Options присвоить значение SearchOptions, установив свойства локали Language и Country соответственно равными "ru" и – не знаю как задать РФ, то
такие регулярные выражения, как "\b", "\w" будут работать с кириллицей или нет? Как здесь?
Проще: регулярки "\b", "\w" видят национальный язык?
« Последнее редактирование: 25 Январь 2021, 15:41 от eeigor » Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 308


WWW
« Ответ #6: 25 Январь 2021, 15:52 »

Насколько я понимаю, поддержка регулярных выражений для Unicode пока не реализована.
Записан

Владимир.
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!