Ох, ёшкин хвост!!!
Обалденный глюк при работе со строками
Модератор: Модераторы
SSerge
Ох, ёшкин хвост!!!
Ох, ёшкин хвост!!!
zub писал(а):лишний раз подтверждает что глюки в программе а не в компиляторе, вы забыли перекодировать строку перед тем как закинуть ее в unicodestring.
Блин, где Вы видите UnicodeString? Пример же перед глазами. Даже если явно конвертировать строку, прежде чем присвоить значение переменной, глюк не исчезает - так что, тут Вы неправы.
sign писал(а):Это не глюк.
Это незнание матчасти.
С вашим понимаем сути, вы никакой символ не получите, если присутствуют не только латинские буквы и символы.
Может и так. Только не с моей стороны незнание, а с Вашей.
Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.
Добавлено спустя 4 минуты 4 секунды:
hinst писал(а):кароч в лазарусе UTF-8, а в Delphi WideChar, поэтому s[1] не буит работать как хочет начавший тему
Добавлено спустя 52 секунды:
твоя работа - твой головняк думать как это реализовать
Замечательно... Сразу видно, что Вы из техподдержки.
Придется ждать выхода другой версии паскаля, как советует мне один добрый человек.
>>Блин, где Вы видите UnicodeString? Пример же перед глазами. Даже если явно конвертировать строку, прежде чем присвоить значение переменной, глюк не исчезает - так что, тут Вы неправы.
Гдето тут:
>>Может и так. Только не с моей стороны незнание, а с Вашей.
Упорство плавно переходит в толстоту)) Вам уже в разных формах показали в чем отличие fpc от delphi в части кодировок строк. Повторяю - ОТЛИЧИЕ а не глюк
>>Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.
Вы будете удивлены, но в utf16 тоже есть составные символы и ваша программа будет работать до тех пор пока они ей не попадутся)) например:
также выдаст 2 как и utf8 в случае 'ы'
edit:
движек форума не позволяет вставить то что я ходел. попробуйте например с строкой состоящей из символа U+1D11E - это какаято музыкальная закорючка
Гдето тут:
Stertor писал(а):Уже видел. Глюк возникает с русскими буквами, причем независимо от типа строки - будь это utf8string или unicodestring.
>>Может и так. Только не с моей стороны незнание, а с Вашей.
Упорство плавно переходит в толстоту)) Вам уже в разных формах показали в чем отличие fpc от delphi в части кодировок строк. Повторяю - ОТЛИЧИЕ а не глюк
>>Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.
Вы будете удивлены, но в utf16 тоже есть составные символы и ваша программа будет работать до тех пор пока они ей не попадутся)) например:
Код: Выделить всё
str:='блин, форум не позволяет вставить такие сымволы((';
showmessage(inttostr(length(str)));также выдаст 2 как и utf8 в случае 'ы'
edit:
движек форума не позволяет вставить то что я ходел. попробуйте например с строкой состоящей из символа U+1D11E - это какаято музыкальная закорючка
Последний раз редактировалось zub 22.08.2014 14:15:27, всего редактировалось 1 раз.
Stertor писал(а):Придется ждать выхода другой версии паскаля, как советует мне один добрый человек.
Есть вон RemObjects Oxygene
http://www.remobjects.com/elements/oxygene/
современно и главное совсем не дорого
>>Придется ждать выхода другой версии паскаля, как советует мне один добрый человек.
ну если не выходит сделать чтоб работало и там и тут - тогда да, хотя уверен что и в 2.8 будут какиенибудь "катострофические" отличия))
ну если не выходит сделать чтоб работало и там и тут - тогда да, хотя уверен что и в 2.8 будут какиенибудь "катострофические" отличия))
zub писал(а):Упорство плавно переходит в толстоту)) Вам уже в разных формах показали в чем отличие fpc от delphi в части кодировок строк. Повторяю - ОТЛИЧИЕ а не глюк
Ну, я только хотел сказать, что благодаря этому обстоятельству, нельзя не боясь проблем использовать строку как массив, как в обычном паскале и делфи. Это не глюк, а подводный камень, о который может споткнуться новичок.
Прошу считать тему закрытой, буду ждать новую версию компилятора.
>>Прошу считать тему закрытой, буду ждать новую версию компилятора.
Таки еще один коментарий, с вашего разрешения))
что за задача такая что требуется именно посимвольная работа не с байтами, а с символами?
Мне на ум ничего такого не приходит, просто не представляю чде утф8 может помешать.
Основа остнов - побайтное сравнение строк - все прекрасно рвботает, несмотря на переменную длину символа
Добавлено спустя 4 минуты:
Нет, придумал - например посчитать ширину строки, при ртрбражении ее какимнибудь своим самодельным шрифтом
Таки еще один коментарий, с вашего разрешения))
что за задача такая что требуется именно посимвольная работа не с байтами, а с символами?
Мне на ум ничего такого не приходит, просто не представляю чде утф8 может помешать.
Основа остнов - побайтное сравнение строк - все прекрасно рвботает, несмотря на переменную длину символа
Добавлено спустя 4 минуты:
Нет, придумал - например посчитать ширину строки, при ртрбражении ее какимнибудь своим самодельным шрифтом
Stertor писал(а):sign писал(а):Это не глюк.
Это незнание матчасти.
С вашим понимаем сути, вы никакой символ не получите, если присутствуют не только латинские буквы и символы.
Может и так. Только не с моей стороны незнание, а с Вашей.
Мы же о Лазарусе! Присутствует незнание матчасти Лазаруса с вавшей стороны.
В Лазарусе для работы со строками с символами размером от одного до четырёх байт предусмотрен модуль LazUTF8.
Stertor писал(а):
Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.
Ещё раз.
Лазарус не Дельфи.
Вы же сами начали вот с этого
Stertor писал(а):Глюк сводится к тому, что нельзя получить 1 символ строки, если строка состоит из 1 символа.Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
//Delphi
var
str:string;
begin
str:='ы';
showmessage(str[1]); // ы
end;
Это следствие незнания вами матчасти Лазаруса.
Добавлено спустя 12 минут 14 секунд:
zub писал(а):>>Прошу считать тему закрытой, буду ждать новую версию компилятора.
Таки еще один коментарий, с вашего разрешения))
что за задача такая что требуется именно посимвольная работа не с байтами, а с символами?
Мне на ум ничего такого не приходит, просто не представляю чде утф8 может помешать.
Основа остнов - побайтное сравнение строк - все прекрасно рвботает, несмотря на переменную длину символа
Добавлено спустя 4 минуты:
Нет, придумал - например посчитать ширину строки, при ртрбражении ее какимнибудь своим самодельным шрифтом
Да много где.
Вот выдираю из одной своей программы.
1. Выделение части строки:
Код: Выделить всё
Article := UTF8Copy(mmPromoRec.Text, mmPromoRec.SelStart, mmPromoRec.SelLength);
2. Поиск подстроки в строке:
i := UTF8Pos('Удален', SC);
3. Определение количества символов в строке:
Код: Выделить всё
MaxLen := UTF8Length(Source);
4. Удалить часть строки:
Код: Выделить всё
UTF8Delete(S, i, j+lenP2 - i);
sign
Соглашусь только с 1 пунктом, если SelStart и SelLength получены от LCL и соответственно заданы в символах. остальное прекрасно работает и без приставки UTF8, думаю даже существенно быстрее - какая разница внутри программы индексация строк в байтах или символах?
Соглашусь только с 1 пунктом, если SelStart и SelLength получены от LCL и соответственно заданы в символах. остальное прекрасно работает и без приставки UTF8, думаю даже существенно быстрее - какая разница внутри программы индексация строк в байтах или символах?
