Unicode

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Hello ClaList,

Задача: найти подстроку из Кларионовской программы в файлах с кодировкой в Unicode.
Формирую строку (3D 04 30 04 и т.д 20 00 3D 04 30 04), читаю в файле, всё нормально. Если только она чистая кириллица.
Как только в строку надо запихнуть <00h>, так сразу пролет. А запихивать надо. Потому как даже пробел и тот <20h><00h> И что интересно:
len(clip(unicodeString))=2*len(clip(ANSIString)), как и должно быть.
Т.е. содержит внутри подлый байт-терминатор как будто.
А через Message или Clipboard выводит только до терминатора. Ну, с последним так и быть должно по хелпу.
Пробовалось всё: от ANY до PString.

Поиск идет через instring. Побайтно скучно получается.
C55ee
Кто знает, как помочь? без С++ и прочего.
Или скажите, что нет решения.

--
Best regards,
Владимир mailto:ut5jbh@ua.fm


(Добавление)

Что-то я не понял - чего тебе надо!?
InString прекрасно работает с нулевыми символами в строках.
Естественно, строка должна быть типа STRING.
- Для того, что-бы обеспечить поиск ЛЮБОЙ последовательности
(например, с последним пробелом, типа '<...,150,32>')
нежелательно искать так: InString(Clip(Mask),Data,1,1).
Лучше добавить еще одну переменную - размер маски и искать:
InString(Mask[1:MaskSize],Data,1,1)
- Файл, в котором ищем, желательно обьявлять как DRIVER('DOS').
- Если файл небольшой - лучше его загрузить сразу целиком в буфер и натравить на этот буфер InString.
- Если файл большой, то читаем большими блоками, заведомо бОльшими чем размер маски. При этом, если на текущем шаге совпадения не найдено, то следущий блок читаем с позиции LastPos + ReadBytes - MaskSize, что-бы обработать случай попадания маски на границу между блоками.

Кстати, Message и не должен выводить нулевые символы.
Так как он базируется на Виндовом MessageBox, который работает со строками типа CSTRING.

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru

Написал: ClaList(2)
Гость

Сообщение Гость »

Вот тут я и лоханулся. Строку лепил слайсингом, а здесь зачем-то через clip пошел.
Спасибо, всё ОК.

--
Best regards,
Владимир
Написал: ClaList(2)
Ответить