Аналог StringReplace для msestring?

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

Аналог StringReplace для msestring?

Сообщение t-ea » 12.01.2011 01:00:37

Есть ли в mse аналог функции StringRepalce принимающий и возвращающий результат в msestring?
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Аналог StringReplace для msestring?

Сообщение debi12345 » 12.01.2011 12:52:59

Мартин ответил:
Have a look to FPC StringReplace() function in rtl/objpas/sysutils/systr.inc.

А чем не удовлетворяет паскальная "StringReplace" ?
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Аналог StringReplace для msestring?

Сообщение t-ea » 13.01.2011 11:08:19

Есть текстовый файл в формате UTF8. Оттуда читаются строки, некоторые значения в них заменяются и записываются назад, естественно, опять в UTF8.

При преобразовании в стандартный string (для StringReplace) некоторые символы теряются — заменяются на вопросительные знаки, в частности символ неразывного дефиса (в UTF8 выглядит как $E2 $80 $91).

Поэтому я и спрашиваю, есть ли уже функция замены строк работающая c уникодом?
Вложения
sample.png
Неразрывный дефис стал вопросительным знаком
sample.png (4.71 КБ) Просмотров: 14749
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Аналог StringReplace для msestring?

Сообщение debi12345 » 13.01.2011 12:30:56

Доложено Мартину.
У него есть пара методов в связке в "msestrings.pas", но я обнаружил, что эта связка забивает после-текст если заменяющее слово длиннее заменяемого.

Добавлено спустя 5 часов 4 минуты 26 секунд:
Готово, нужно протестировать:

Trunk 4286 has replacestring() function, experimental, please test.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Аналог StringReplace для msestring?

Сообщение t-ea » 14.01.2011 11:46:09

Не хочет :(

В первом случае произошла замена не всей подстроки, а во втором вообще не должно быть никаких замен.
Вложения
error.zip
Demo program
(6.51 КБ) Скачиваний: 622
error.png
error.png (7.99 КБ) Просмотров: 14695
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: Аналог StringReplace для msestring?

Сообщение debi12345 » 14.01.2011 17:11:36

Ответ:

"
S1:='<text:text-input
text:description="Фамилия">$Фамилия$</text:text-input>';
se1.Value:=S1;
se2.Value:=UTF8ToString(S1);
"
Doesn't work,
"
'<text:text-input
text:description="Фамилия">$Фамилия$</text:text-input>'
"
will be converted utf-8 -> utf-16 on compiletime and converted utf-16 ->
current system encoding on runtime by the unicodestringmanager.
"
S1:='<t...
"

Coneversion current system encoding -> utf-16 on runtime by the
widestringmanager.
"
se1.Value:=S1;
"

So either use all msestring and msestring version of replacestring():
"
var
S1, S2 : msestring;
begin
S1:='<text:text-input
text:description="Фамилия">$Фамилия$</text:text-input>';
se2.Value:=S1;
se3.Value:=ReplaceString(S1, '$Фамилия$', 'Иванов');
"

or all utf-8 ansistring, now FPC ansi StringReplace() can be used:
"
var
S1, S2 : string;
begin
S1:= stringtoutf8('<text:text-input
text:description="Фамилия">$Фамилия$</text:text-input>');
se2.Value:= utf8tostring(S1);
se3.Value:= utf8tostring(StringReplace(S1,stringtoutf8('$Фамилия$'),
stringtoutf8('Иванов'),[]));
"


> Lower: there's should be nothing replaced.

Should be fixed in trunk 4265, there was a wrong parenthesis.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Аналог StringReplace для msestring?

Сообщение t-ea » 19.01.2011 19:23:14

Извиняюсь что долго не отвечал - только сегодня смог проверить. Теперь всё работает как мне надо.

Первый пример и не должен был работать, (там нет преобразования из UTF8), но заметил это уже после отправки сообщения и не стал исправлять.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34


Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

Рейтинг@Mail.ru