Последняя версия DataExpress 3 beta от 15 сентября 2020 года.

Изображение Скачать | Изображение Что нового?



Объявление:

Если вам понравилась программа и вы ее интенсивно используете - замолвите словечко о ней на вашем сайте (блоге, форуме, твитере, краской на подъезде, ютуб-канале и т.д.) с активной (по-возможности) ссылкой на сайт программы/форум. Тем самым вы можете внести небольшой вклад в seo-карму проекта в виде входящих ссылок.
Спасибо! Администрация :)


>> Обсудить <<

кодировки текста и поиск через VBScript.RegExp

Взаимодействие DataExpress с операционной системой, другими приложениями и сервисами.
kok80
Эксперт
Сообщения: 353
Зарегистрирован: 02 июл 2018, 21:45
Благодарил (а): 3 раза
Поблагодарили: 34 раза

кодировки текста и поиск через VBScript.RegExp

Сообщение kok80 » 14 янв 2020, 22:51

У меня есть задача: внешняя программа сохраняет на диск текстовой файл в кодировке WinCP (1251). Dx должен прочитать этот файл, найти в нем нужный текст и внести его в базу. Поиск текста осуществляю через VBScript.RegExp.

Проблемы:
1) при конвертации Utf8ToUtf16 длина строки уменьшается в 2 раза, кнопка [Utf8ToUtf16(s)]
для решения увеличиваю длину строки в 2раза s:=s+s, кнопка [Utf8ToUtf16(s+s)]
как правильно конвертировать ?

2) по умолчанию текст в DX хранится в UTF8
Если значение строки задавать в DX (s:='текст'), то VBScript.RegExp находит текст
Если значение загрузить из файла в StringList и конвертировать через WinCPToUTF8(s), то VBScript.RegExp не находит текст
Если значение загрузить из файла в StringList и конвертировать через UTF8ToUTF16(WinCPToUTF8(s)), то VBScript.RegExp находит текст, но загруженный текст короче 2 раза
Если значение загрузить из файла в StringList и конвертировать через UTF8ToUTF16(WinCPToUTF8(s+s)), то VBScript.RegExp находит текст


WTF???
Вложения
UTF8.zip
(50 КБ) 44 скачивания

Аватара пользователя
admin
Разработчик
Сообщения: 5176
Зарегистрирован: 14 мар 2016, 11:32
Откуда: Ленинградская
Благодарил (а): 41 раз
Поблагодарили: 335 раз

кодировки текста и поиск через VBScript.RegExp

Сообщение admin » 15 янв 2020, 10:28

Что-то с файлом не то. Вот так у меня в Notepad+ отображается.
Вложения
Screenshot_1.jpg
Screenshot_1.jpg (60.75 КБ) 539 просмотров

kok80
Эксперт
Сообщения: 353
Зарегистрирован: 02 июл 2018, 21:45
Благодарил (а): 3 раза
Поблагодарили: 34 раза

кодировки текста и поиск через VBScript.RegExp

Сообщение kok80 » 15 янв 2020, 11:32

в Notepad++ encoding -> character sets -> cyrillic -> windows-1251
у вас macintosh кодировка

Аватара пользователя
Develop-Soft
Сообщения: 1756
Зарегистрирован: 05 мар 2019, 18:09
Благодарил (а): 122 раза
Поблагодарили: 474 раза
Контактная информация:

кодировки текста и поиск через VBScript.RegExp

Сообщение Develop-Soft » 15 янв 2020, 13:37

Похоже string - это "плавающий" тип. Надо явно привести строки к одному типу:

Код: Выделить всё

procedure dxButton3_OnClick(sender:TObject);
var //...
    ws,ws2:WideString;
begin
  // ...
  ws := s;
  ws2 := s2;
  debug(preg_match('составляет \d+',ws));  // находит
  debug(preg_match('составляет \d+',ws2)); // находит
end;     

kok80
Эксперт
Сообщения: 353
Зарегистрирован: 02 июл 2018, 21:45
Благодарил (а): 3 раза
Поблагодарили: 34 раза

кодировки текста и поиск через VBScript.RegExp

Сообщение kok80 » 15 янв 2020, 18:12

Видимо, так и есть.
Причем тип string определяется системой в зависимости от кодировки и может быть и WideString и AnsiString.


Вернуться в «Интеграция»