|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
||||||
Поиск в строках массива текста вне зависимости от используемой раскладки10.06.2019, 09:13. Показов 4353. Ответов 26
Метки нет (Все метки)
Ситуация такая: пользователю дана возможность в textBox вводить данные.
Необходимо осуществить поиск этих данных в строках массива. Особенность вот в чем: пользователь может вводить свои данные как на русском, так и на английском. Например, BX4850 на английской раскладке аналогично тому на выглядит ВХ4850 на русской раскладке. То, в каком виде в строке массива содержится подобное значение неизвестно. Строка массива может как в русской раскладке содержать такую запись, так и в английской. Но нужно все равно выдать эту строку, если найдено подобное совпадение. То есть, по хорошему, должно быть все равно на то, с использованием какой раскладки пользователь укажет свои данные. Нужно все равно выдать ему все возможные варианты для дальнейшего потом отбора им из списка тех, что на самом деле нужны. Помогите на С# реализовать подобное. Есть такой вариант с использованием регулярных выражений. Но он с русским текстом не хочет работать. Если я просто в pattern передаю значение из textBox'а, то результат поиска нулевой.
0
|
||||||
| 10.06.2019, 09:13 | |
|
Ответы с готовыми решениями:
26
Считывание нажатия клавиш вне зависимости от раскладки Изменение символов текста в зависимости от раскладки Поиск городов из списка вне зависимости от регистра |
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 09:31 | |
|
Re_L Mayer, тут нужно уточнить важный момент: строка сформирована или чисто на русском языке или чисто на английском, но не в перемешку? Тогда решение сводится к тому, что мы сначала ищем совпадения в текущем варианте, потому преобразовываем строку в альтернативный и ещё раз ищем.
Такие преобразования придётся делать руками. Заводить таблицу\таблицы проецирования символов одной раскладки на другую. Если массив строк будет большим, то эффективнее использовать ассоциативные контейнеры (Dictionary, SortedDictionary). Не пытайтесь решить эту задачу регулярными выражениями. Это не волшебная палочка на каждый чих.
0
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 10:13 [ТС] | |
|
ВХ-2916
УГ3И 01 ВХ 2816 УГ4И 2ФМ-4 2-506 Это пример того, что может содержаться в строках. Добавлено через 6 минут Сама строка может содержать в себе как и русский, так и английский текст. Проще говоря, есть куча безобразного чего-то. Эту кучу нужно разобрать и найдя что-то удовлетворяющее запросам пользователя - выдать ему. И массив строк будет большим. Очень большим. Добавлено через 3 минуты Просто все, что касается текста на английском криво-косо у меня получается придумать как регулярками найти в строке. Но как только дело доходит до того, что нужно еще по русскому тексту отбирать - тут регулярки и подводят. Приблизительно так выглядят строки массива. 07061609101216081NJ B2010 Fe-102 ВХ 2816 5-1075-2 1 203504 1 028C 0.198929 Si 0.266017 Mn 0.018393 Al_sol 0.294912 01№ Пробы 013 07061609101216191NJ B2010 Fe-102 УГ4И 1 203504 1 028C 0.518270 Si 2.135885 Mn 0.003682 Al_sol 0.022410 01№ Пробы 013 06881609101221521NJ B2010 Fe-601 2ФМ-4 027C 0.158004 Si 0.877650 Mn 0.078082 Fe 70.26136301№ Пробы ТР 2
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 10:15 | |
|
Re_L Mayer, тогда рекомендую хранить это безобразие в
Dictionary. Завести свой Comparer, который будет считать хеш строки игнорируя "раскладку" символов и сравнивать эти строки так же игнорируя раскладку.Регулярки тут вообще мимо.
1
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 10:27 [ТС] | |
|
Если можно, то поделитесь, пожалуйста, примером решения какой-либо задачи с использованием этого.
Про словари читала информацию. Но примеров мало. Не совсем понимаю как их юзать. И что за Comparer? Быть может у Вас на него найдется пример...
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 10:49 | |
Сообщение было отмечено Re_L Mayer как решение
Решение
Re_L Mayer, идея в том, чтобы сравнивать строки вне зависимости от их языка. Класс Dictionary подходит для хранения и быстрого поиска в нём. Comparer - класс, который словарь будет использовать для поиска строк в себе. Для его передачи в словарь есть отдельный конструктор.
Вам нужно написать такой компарер, который для строк "QWE" и "ЙЦУ" выдаст одинаковый хеш и при их сравнении ответит TRUE.
1
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 10:51 [ТС] | |
|
Спасибо. Идея понятна.
Буду разбираться с инструментами, что Вы предложили.
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 10:55 | |
|
Re_L Mayer, учтите, что конкретно в такой ситуации Dictionary, при попытке добавить в него строку "QWE" выбросит исключение, если в нём уже есть семантически эквивалентная строка "ЙЦУ".
Способов реализации вашей задачи может быть несколько. Я предложил самый простой вариант.
1
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 10.06.2019, 11:25 | |
|
Если массив большой и поиск производится много раз, то я бы при чтении этого массива один раз нормализовал все записи, приведя их к одному языку и потом перед каждым поиском так же нормализовывал бы введенное пользователем значение.
После чего уже можно производить поиск по-нормальному.
1
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 11:30 [ТС] | |
|
Спасибо за предложенный вариант. Но не думаю, что для меня это вариант решения. Ибо перебирать каждый элемент строки. Определять то на каком он языке и переводить его в удобный - это долго. Да к тому же не всем русским буквам можно эквивалент в английском языке найти и наоборот.
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
||
| 10.06.2019, 11:39 | ||
|
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 10.06.2019, 11:41 | ||
|
Выбор в том, делать ли это один раз при загрузке всего массива или каждый раз при поиске.
0
|
||
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 12:26 [ТС] | |
|
Оно то да, понятно. Что разбирать придется. Просто заменить не все можно на то, что удобно. Это бОльшая проблема. Если б можно было, то проблемы то и не было... сразу бы взялась за конвертирование в нужный язык.
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 12:34 | |
|
Re_L Mayer, почему не возможно? Если исходные данные не возможно, то при загрузке приложения их копию в нужном виде?
0
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 12:43 [ТС] | |
|
Допустим мне английская раскладка предпочтительнее..Потому ВХ-2916 из русской раскладки в исходнике я переведу в английскую в его копии. Но как быть с УГ3И, 2ФМ-4 и прочим подобным? Удобную английскую раскладку мне в этом случае не использовать.
Или просто я не совсем понимаю попытки еще один способ решения моей задачи мне объяснить.
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 13:14 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
|
| 10.06.2019, 13:22 [ТС] | |
|
Раскладкой. Возможно.
Если я у себя в строке встречу УГ3И, 2ФМ-4 то вопросов нет на счет языка. И если пользователю нужна именно эта строка где есть этот текст, то он только на русском и сможет написать свой запрос. А если у меня в строке ВХ-2916 - то тут вопрос на русском это или английском написано. Можно определить, да. Но я хочу добиться следующего... чтобы даже если пользователь введет ВХ-2916 на русском, а у меня в строке на английском есть ВХ-2916, то выдать эту строку.
0
|
|
|
14308 / 9389 / 1355
Регистрация: 21.01.2016
Сообщений: 35,410
|
|
| 10.06.2019, 13:31 | |
|
Re_L Mayer, и? Вам уже сказали как это сделать: насильно переводить в один язык.
Добавлено через 4 минуты Если вы будете использовать Dictionary или HashSet, то такое приведение вы будете делать в обязательном порядке, чтобы рассчитать хеш ключа.
0
|
|
|
0 / 0 / 1
Регистрация: 19.12.2013
Сообщений: 21
|
||
| 10.06.2019, 14:32 [ТС] | ||
|
А вашу идею прописать с помощью словаря варианты замены одних букв другими я приняла. И изучаю сейчас этот вопрос.
0
|
||
|
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
|
|
| 10.06.2019, 14:36 | |
|
получается, в основном текст на русском, но могут попадаться и англ. буквы, при их одинаковом начертании?
0
|
|
| 10.06.2019, 14:36 | |
|
Помогаю со студенческими работами здесь
20
Поиск и замена текста в строках без учета регистра Поиск в строках массива Получить символ с клавиатуры в зависимости от текущей раскладки Поиск елемента 2-хмерного массива который встречается во всех строках
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
/ / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров)
. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|