Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2018, 08:21   #1
S_Alexander
 
Регистрация: 08.02.2011
Сообщений: 3
По умолчанию Как организовать поиск строки в тексте с учетом кодировки?

Уважаемые специалисты - может Вы что то подскажете? Проблема в следующем:
Работаю в бесплатно аналоге Delphi и Lazarus - CodeTyphon64 (для 32-бит есть CodeTyphon32). Встала проблема поиска (парсинг) в большом XML файле (кодировка UTF-8 без ВОМ). В окне Мемо русские символы его не отображаются (кракозябры). Для отображения его в Мемо сконвертировал его в UTF-8. Отображение русских символов пошло нормально. Попытался организовать поиск с помощью стандартного компонента FindDialog. Итог - дает не верные результаты.
Пробовал самодельные (pos(искомая подстрока, строка текста) + найденные в сети) варианты поиска. В итоге классический метод + найденные методы, применяемые для поиска не работают. Понял, что поиск идет не посимвольно - как это вроде бы должно быть, а ПО БАЙТАМ составляющих текст символов. И вот тут то и начинаются все проблемы. Символы в разных кодировках и даже внутри одной кодировки могут кодироваться разным числом байтов. В итоге побайтовый поиск не работает - особенно если в тексте одновременно присутствуют символы русского и английского языков. Или я чего то не понимаю??? Главная непонятка для меня в том - как можно разделить символы друг от друга используя их байты или байтовые (битовые слова)? По идее байтовое представление каждого символа в любой нормальной кодировке, независимо от самой кодировки и числа байтов в символе, должно начинаться с какой то метки, которая позволит понять, что мы имеем дело с новыми символом в тексте. Таким образом мы сможем разделить текст на символы и создать массив символов текста с которым потом можно работать. Вопрос у том - есть ли такие метки для символов у кодировок и какие они? Пока я не нашел четкого и ясного ответа на этот простой вопрос. Может ли кто нибудь ответить мне на него? Возможно есть уже готовые библиотеки, которые это делают, но я их не нашел?
Что же делать? Как организовать поиск? Тем более, что в стандартных текстовых редакторах типа notebook - обычный блокнот это делается без проблем. Может тогда просто программно загружать искомый файл в блокнот и там программно вести поиск? Но нужна хорошая документация по программному управлению блокнотом из своего приложения. В сети нашел лишь простенькие примеры программного управления блокнотом из приложения. Может кто что то подскажет? Думаю это тема очень важная для всех. Возможно конечно, что я чего то не знаю. Не судите строго. Посоветуйте что делать - если у кого то есть идеи. С уважением Александр
S_Alexander вне форума Ответить с цитированием
Старый 18.08.2018, 08:39   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

позволю себе процитировать свой пост на форуме:


а ещё, очень полезное чтиво:
Абсолютный Минимум, который Каждый Разработчик Программного Обеспечения Обязательно Должен Знать о Unicode и Наборах Символов
цитирую оттуда:
Цитата:
...
Самый Важный Факт О Кодировках

Даже если вы полностью забыли всё то, что я вам только что объяснял, пожалуйста, помните один чрезвычайно важный факт. Не имеет смысла иметь строку, не зная, в какой она кодировке. Вы больше не можете засунуть голову в песок и притвориться, что это "простой" текст в ASCII.

Нет Такой Вещи Как Простой Текст.

Если у вас есть строка -- в памяти, в файле, или в сообщении электронной почты -- вы должны знать, в какой она кодировке, иначе вы не сможете правильно её интерпретировать или показать пользователю.
...

Цитата:
Сообщение от S_Alexander Посмотреть сообщение
Может тогда просто программно загружать искомый файл в блокнот и там программно вести поиск?
Ни в коем случае!! Это не костыли, это КОСТЫЛИЩААА!

Цитата:
Сообщение от S_Alexander Посмотреть сообщение
pos(искомая подстрока, строка текста)
это должно работать. Только в том случае, если и искомая строка и строка текста В ОДНОЙ И ТОЙ кодировке.

покажите пример вашего кода.
В особо тяжёлом случае можно сделать небольшой тестовый проект, приложить к нему небольшой XML файлик, запаковать исходники в проект и выложить проект сюда, на форум.

Последний раз редактировалось Serge_Bliznykov; 18.08.2018 в 08:43.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена заданной строки в тексте Taner Общие вопросы Delphi 9 14.06.2014 10:45
как организовать поиск в БД bsambo2013 Фриланс 1 27.11.2013 23:32
Поиск слов в тексте(Строки в Паскале) ParkDI Помощь студентам 0 28.11.2010 18:03
Поиск строки в тексте по маске Gerzs Общие вопросы Delphi 3 24.03.2010 09:36
Организовать поиск всех вхождений заданного слова в загруженном тексте s2dentishe Помощь студентам 0 21.11.2009 18:53