Обалденный глюк при работе со строками

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Re: Обалденный глюк при работе со строками

Сообщение Vadim » 22.08.2014 04:56:17

SSerge
Ох, ёшкин хвост!!! :D
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Обалденный глюк при работе со строками

Сообщение Stertor » 22.08.2014 12:07:33

zub писал(а):лишний раз подтверждает что глюки в программе а не в компиляторе, вы забыли перекодировать строку перед тем как закинуть ее в unicodestring.

Блин, где Вы видите UnicodeString? Пример же перед глазами. Даже если явно конвертировать строку, прежде чем присвоить значение переменной, глюк не исчезает - так что, тут Вы неправы.

sign писал(а):Это не глюк.
Это незнание матчасти.
С вашим понимаем сути, вы никакой символ не получите, если присутствуют не только латинские буквы и символы.

Может и так. Только не с моей стороны незнание, а с Вашей.

Код: Выделить всё
S := 'Привет';
    Ch := S[3];


Ch - ни разу не будет 'и';


Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.

Добавлено спустя 4 минуты 4 секунды:
hinst писал(а):кароч в лазарусе UTF-8, а в Delphi WideChar, поэтому s[1] не буит работать как хочет начавший тему

Добавлено спустя 52 секунды:
твоя работа - твой головняк думать как это реализовать


Замечательно... Сразу видно, что Вы из техподдержки.


Придется ждать выхода другой версии паскаля, как советует мне один добрый человек.
Аватара пользователя
Stertor
новенький
 
Сообщения: 20
Зарегистрирован: 10.08.2014 18:11:12

Re: Обалденный глюк при работе со строками

Сообщение zub » 22.08.2014 13:53:57

>>Блин, где Вы видите UnicodeString? Пример же перед глазами. Даже если явно конвертировать строку, прежде чем присвоить значение переменной, глюк не исчезает - так что, тут Вы неправы.
Гдето тут:
Stertor писал(а):Уже видел. Глюк возникает с русскими буквами, причем независимо от типа строки - будь это utf8string или unicodestring.


>>Может и так. Только не с моей стороны незнание, а с Вашей.
Упорство плавно переходит в толстоту)) Вам уже в разных формах показали в чем отличие fpc от delphi в части кодировок строк. Повторяю - ОТЛИЧИЕ а не глюк

>>Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.
Вы будете удивлены, но в utf16 тоже есть составные символы и ваша программа будет работать до тех пор пока они ей не попадутся)) например:
Код: Выделить всё
str:='блин, форум не позволяет вставить такие сымволы((';
showmessage(inttostr(length(str)));

также выдаст 2 как и utf8 в случае 'ы'
edit:
движек форума не позволяет вставить то что я ходел. попробуйте например с строкой состоящей из символа U+1D11E - это какаято музыкальная закорючка
Последний раз редактировалось zub 22.08.2014 14:15:27, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Обалденный глюк при работе со строками

Сообщение hinst » 22.08.2014 13:58:03

Stertor писал(а):Придется ждать выхода другой версии паскаля, как советует мне один добрый человек.


Есть вон RemObjects Oxygene
http://www.remobjects.com/elements/oxygene/
современно и главное совсем не дорого
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Обалденный глюк при работе со строками

Сообщение zub » 22.08.2014 14:04:05

>>Придется ждать выхода другой версии паскаля, как советует мне один добрый человек.
ну если не выходит сделать чтоб работало и там и тут - тогда да, хотя уверен что и в 2.8 будут какиенибудь "катострофические" отличия))
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Обалденный глюк при работе со строками

Сообщение Stertor » 22.08.2014 14:41:15

zub писал(а):Упорство плавно переходит в толстоту)) Вам уже в разных формах показали в чем отличие fpc от delphi в части кодировок строк. Повторяю - ОТЛИЧИЕ а не глюк


Ну, я только хотел сказать, что благодаря этому обстоятельству, нельзя не боясь проблем использовать строку как массив, как в обычном паскале и делфи. Это не глюк, а подводный камень, о который может споткнуться новичок.

Прошу считать тему закрытой, буду ждать новую версию компилятора.
Аватара пользователя
Stertor
новенький
 
Сообщения: 20
Зарегистрирован: 10.08.2014 18:11:12

Re: Обалденный глюк при работе со строками

Сообщение zub » 22.08.2014 15:26:40

>>Прошу считать тему закрытой, буду ждать новую версию компилятора.
Таки еще один коментарий, с вашего разрешения))
что за задача такая что требуется именно посимвольная работа не с байтами, а с символами?
Мне на ум ничего такого не приходит, просто не представляю чде утф8 может помешать.
Основа остнов - побайтное сравнение строк - все прекрасно рвботает, несмотря на переменную длину символа

Добавлено спустя 4 минуты:
Нет, придумал - например посчитать ширину строки, при ртрбражении ее какимнибудь своим самодельным шрифтом
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Re: Обалденный глюк при работе со строками

Сообщение sign » 23.08.2014 07:04:21

Stertor писал(а):
sign писал(а):Это не глюк.
Это незнание матчасти.
С вашим понимаем сути, вы никакой символ не получите, если присутствуют не только латинские буквы и символы.

Может и так. Только не с моей стороны незнание, а с Вашей.

Мы же о Лазарусе! Присутствует незнание матчасти Лазаруса с вавшей стороны.
В Лазарусе для работы со строками с символами размером от одного до четырёх байт предусмотрен модуль LazUTF8.

Stertor писал(а):
Код: Выделить всё
S := 'Привет';
    Ch := S[3];


Ch - ни разу не будет 'и';


Будет, еще как будет(если речь о Делфи), причем безразлично, чем набита строка, хоть русские буквы вперемешку с йероглифами.

Ещё раз.
Лазарус не Дельфи.

Вы же сами начали вот с этого
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
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Обалденный глюк при работе со строками

Сообщение zub » 23.08.2014 12:53:30

sign
Соглашусь только с 1 пунктом, если SelStart и SelLength получены от LCL и соответственно заданы в символах. остальное прекрасно работает и без приставки UTF8, думаю даже существенно быстрее - какая разница внутри программы индексация строк в байтах или символах?
zub
долгожитель
 
Сообщения: 2887
Зарегистрирован: 14.11.2005 23:51:26

Пред.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru