Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10   вперед  Ctrl      все
 Re: Lazarus  [new]
Василий 2
Member

Откуда:
Сообщений: 805
Док
не обижай зря человека. ИМХО, иногда воркэраунд целесообразнее, чем замена свечей на работающем двигателе.

От преумножения говнокода целесообразнее не становится, а ведь кому-то в нем еще и ковыряться
18 окт 19, 10:20    [21997145]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
Василий 2,

повторюсь: строки нормальные станут - говнокод выкину. а так то как быстрое решение работает. были бы нормальные строки, проблемы бы вообще не было. уже, видно, что и в лазаре (fpc) наконец осознали и правят. и, да, ковырять больше кроме меня этот кусок некому, можешь не беспокоиться.
18 окт 19, 10:40    [21997170]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3895
makhaon
строки нормальные станут - говнокод выкину. а так то как быстрое решение работает. были бы нормальные строки, проблемы бы вообще не было.

Строки и так нормальные... Единый код:

Delphi 10.3:
Картинка с другого сайта.

Lazarus 2.1 (trunk) {$mode delphiunicode}:
Картинка с другого сайта.

Lazarus 2.1 (trunk) {$mode delphi}:
Картинка с другого сайта.
18 окт 19, 12:14    [21997297]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
наконец пошел код, а не голословные набросы на вентилятор. у меня так:

procedure TForm6.Button1Click(Sender: TObject);
 function CopyLim(const s: string; StrBeg, StrEnd: integer): string;
 begin
  Result := Copy(s, StrBeg, StrEnd - StrBeg + 1);
 end;

 function NameFormat(const s: string): string;
 var
  Pos1, Pos2: integer;
 begin
  Pos1 := Pos(' ', s);
  Pos2 := PosEx(' ', s, Pos1 + 1);
  Result := CopyLim(s, 1, Pos1 + 1) + '.' + CopyLim(s, Pos2 + 1, Pos2 + 1) + '.';
 end;

var
 s: string;
begin
 s := 'тест тест тест';
 s := NameFormat(s);
 ShowMessage(s);
end;


Ставлю бряк перед ShowMessage
Win/Delphi показывает

К сообщению приложен файл. Размер - 489bytes
18 окт 19, 14:24    [21997458]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
Лазарь/Убунта:

К сообщению приложен файл. Размер - 1Kb
18 окт 19, 14:25    [21997460]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
финально на винде все ок:

[Window Title]
Project7

[Content]
тест т.т.

[OK]

на убунте сообщения не видно

К сообщению приложен файл. Размер - 6Kb
18 окт 19, 14:28    [21997461]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
в delphiunicode - все ок на убунте, как и ожидалось ждем этот режим дефолтно
18 окт 19, 14:32    [21997465]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
из наблюдений по поводу delphiunicode. большая часть всех строчных функций дефолтно несовместима с delphiunicode режимом. ладно бы просто api, хотя и оно все несовместимо.
что бы далеко не ходить - ShowMessage:
unit1.pas(53,15) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
18 окт 19, 14:39    [21997470]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3895
makhaon,

Говнокод из палаты мер и весов работать и не должен. Если ты закладываешься на то, что символ юникода уместится в одну кодовую позицию строки - ты огребаешь. C utf-8 или utf-16 - не имеет значения (с utf-16 тебе просто везёт больше, т.к. он закрывает весь BMP. Будут там суррогаты, и эти строки для тебя окажутся "неправильными").

makhaon
unit1.pas(53,15) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"

Где тут проблема? На линуксе дефолтная кодовая страница utf-8, т.ч. приведение UnicodeString к AnsiString ни к чему ужасному не приведёт.
18 окт 19, 15:00    [21997498]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3895
Kazantsev Alexey
т.к. он закрывает весь BMP

т.к. его одиночные кодовые позиции закрывают весь BMP.
18 окт 19, 15:02    [21997499]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Док
Member

Откуда: Казань
Сообщений: 6462
makhaon,
+1

Я тоже пока не понимаю оптимизма про юникод. Все utf8, все вручную с явным приведением типов
18 окт 19, 15:06    [21997506]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
для своих границ применения этих строк и кода достаточно
18 окт 19, 15:21    [21997519]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3402
автор
Где тут проблема? На линуксе дефолтная кодовая страница utf-8, т.ч. приведение UnicodeString к AnsiString ни к чему ужасному не приведёт.

то есть - работа с кодовыми позициями utf16 это говнокод, а куча варнингов по коду - это все отлично? ясно-понятно.
18 окт 19, 15:25    [21997522]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3895
makhaon
а куча варнингов по коду - это все отлично? ясно-понятно.

Компилятор хочет от тебя явного приведения типа - чтобы убедиться, что ты знаешь, что делаешь.
18 окт 19, 16:12    [21997564]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
ёёёёё
Member

Откуда:
Сообщений: 1405
makhaon
автор
Где тут проблема? На линуксе дефолтная кодовая страница utf-8, т.ч. приведение UnicodeString к AnsiString ни к чему ужасному не приведёт.

то есть - работа с кодовыми позициями utf16 это говнокод, а куча варнингов по коду - это все отлично? ясно-понятно.

А я не смотрю на ворнинги. Что на них смотреть. Компиляции не мешают.
То одни, то другие. Со времён Delphi 3 много кода, что-то поменялось, стало "деприкатет".
18 окт 19, 17:42    [21997645]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
rgreat
Member

Откуда:
Сообщений: 5454
ёёёёё
А я не смотрю на ворнинги. Что на них смотреть. Компиляции не мешают.
Я бы за это как минимум лишал премии.
18 окт 19, 17:57    [21997660]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
ёёёёё
Member

Откуда:
Сообщений: 1405
rgreat
ёёёёё
А я не смотрю на ворнинги. Что на них смотреть. Компиляции не мешают.
Я бы за это как минимум лишал премии.

Да ну. У нас премии на результат и сроки, а не за красоту кода.
18 окт 19, 18:01    [21997669]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
rgreat
Member

Откуда:
Сообщений: 5454
ёёёёё,

Хуяк хуяк и в продакшн! (с) ;)
18 окт 19, 18:28    [21997689]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
ёёёёё
Member

Откуда:
Сообщений: 1405
rgreat,

именно.
18 окт 19, 18:31    [21997692]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
rgreat
Member

Откуда:
Сообщений: 5454
Отличные последствия того что RTL живет в UTF8:

function AnsiUpperCase(Text: string): string;
begin
  Result:=UTF8Decode(SysUtils.AnsiLowerCase(UTF8Encode(Text)));
end;

function AnsiLowerCase(Text: string): string;
begin
  Result:=UTF8Decode(SysUtils.AnsiLowerCase(UTF8Encode(Text)));
end;
18 окт 19, 18:45    [21997704]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
rgreat
Member

Откуда:
Сообщений: 5454
Упс. AnsiUpperCase в AnsiUpperCase, конечно.
18 окт 19, 18:46    [21997705]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3895
rgreat,

Зачем ты это написал???
18 окт 19, 20:04    [21997756]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
rgreat
Member

Откуда:
Сообщений: 5454
Kazantsev Alexey,

Потому что:
Result:=AnsiLowerCase(Result);   // Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
18 окт 19, 20:18    [21997760]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
rgreat
Member

Откуда:
Сообщений: 5454
И да, действительно "даталосс".
18 окт 19, 20:28    [21997761]     Ответить | Цитировать Сообщить модератору
 Re: Lazarus  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3895
rgreat
И да, действительно "даталосс

Весь код покажи, и что именно теряется.
18 окт 19, 20:46    [21997766]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 5 [6] 7 8 9 10   вперед  Ctrl      все
Все форумы / Delphi Ответить