Последняя версия DataExpress 3 beta от 7 декабря 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

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

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

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

Сообщение kok80 » Вт янв 14, 2020 10:51 pm

У меня есть задача: внешняя программа сохраняет на диск текстовой файл в кодировке 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 КБ) 4 скачивания

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

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

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

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

kok80
Эксперт
Сообщения: 325
Зарегистрирован: Пн июл 02, 2018 9:45 pm
Благодарил (а): 2 раза
Поблагодарили: 22 раза

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

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

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

Аватара пользователя
Develop-Soft
Сообщения: 1139
Зарегистрирован: Вт мар 05, 2019 6:09 pm
Благодарил (а): 42 раза
Поблагодарили: 247 раз
Контактная информация:

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

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

Похоже 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
Эксперт
Сообщения: 325
Зарегистрирован: Пн июл 02, 2018 9:45 pm
Благодарил (а): 2 раза
Поблагодарили: 22 раза

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

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

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