Lazarus 1.6, обсудим изменения...

Вопросы программирования и использования среды Lazarus.

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

Re: Lazarus 1.6, обсудим изменения...

Сообщение sts » 17.02.2016 23:29:01

zub писал(а):Поддержка вполне полноценная.

судя по "никакой больше индексной адресации элементов строк" не вполне

Добавлено спустя 7 минут 56 секунд:
мда, и причин почему не компилируется указанный код, с определенными оптимизациями, нету
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Lazarus 1.6, обсудим изменения...

Сообщение zub » 17.02.2016 23:37:27

А кто когда говорил что она будет? и вообще зачем она?

Добавлено спустя 10 минут 32 секунды:
Я бы сказал по другому - причина компилироваться указанному коду только одна - он компилируется в делфи))
>>мда, и причин почему не компилируется указанный код, с определенными оптимизациями, нету
Причин не будет только если сохранить исходник в ubf8bom или прямо указать кодировку исходника, без этого они есть
Последний раз редактировалось zub 17.02.2016 23:49:04, всего редактировалось 1 раз.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Lazarus 1.6, обсудим изменения...

Сообщение sts » 17.02.2016 23:48:54

zub писал(а):А кто когда говорил что она будет? и вообще зачем она?

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

Добавлено спустя 1 минуту 40 секунд:
zub писал(а):Причин не будет только если сохранить исходник в ubf8bom, или прямо указать кодировку исходника, без этого они есть

это и так неизбежно делается.
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Lazarus 1.6, обсудим изменения...

Сообщение zub » 17.02.2016 23:51:17

>>раз она уже была ранее
в том ключе в котором предпологаете вы (s[i]=итый_символ) ее небыло никогда
Это не проблема паскаля что развелось столько много разных кодировок

Добавлено спустя 2 минуты 25 секунд:
по умолчанию лазарь сохраняет без бома. с если бы сохранялось с бомом весь форум был бы забит воплями))
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Lazarus 1.6, обсудим изменения...

Сообщение sts » 17.02.2016 23:58:40

zub писал(а):в том ключе в котором предпологаете вы (s[i]=итый_символ) ее небыло никогда

приведите пример когда это было не эквивалентно во времена однобайтовых\двухбайтовых строк
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Lazarus 1.6, обсудим изменения...

Сообщение resident » 18.02.2016 00:00:24

zub писал(а):Давайте какуюнить более жизненную задачу, требующую именно посимвольной адресации.

Из xml читаются размеры книги, текстовое значение узла в основном похоже на 100х200, а также может быть 100х200/5.
Кроме этого в узле иногда попадается хлам - пробелы, запятые или вобще буквы.
"х" может быть и мелкая и большая и наша и латиница.
Что делаю я:
StringReplace-ом преобразую любые "х" к мелкой латинской.
Посимвольно читаю строку и если текущий символ от "0" до "9" или латинская "х", "Х" или наша "х", "Х" или "/", то он мне подходит и я его беру для заполнения чистой строки для парсинга.
Что-то типа такого (OfferBinding - строка с хламом):
Код: Выделить всё
          Str := '';
          OfferBinding := StringReplace(OfferBinding, 'х', 'x', [rfReplaceAll, rfIgnoreCase]);
          OfferBinding := StringReplace(OfferBinding, 'Х', 'x', [rfReplaceAll, rfIgnoreCase]);
          OfferBinding := StringReplace(OfferBinding, 'X', 'x', [rfReplaceAll, rfIgnoreCase]);
          for i := 0 to High(OfferBinding) do
            if (OfferBinding[i] in ['0'..'9']) or (OfferBinding[i] in ['x', '/']) then Str := Str + OfferBinding[i];
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Lazarus 1.6, обсудим изменения...

Сообщение sts » 18.02.2016 00:04:55

смутно припоминаю что уже в 6 tp это было уже так.

Добавлено спустя 1 минуту 5 секунд:
я про "s[i]=итый_символ"
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Lazarus 1.6, обсудим изменения...

Сообщение zub » 18.02.2016 00:15:25

Т.е. есть строка, есть разделители, есть нужный текст между разделителями...
ищем позиции раделителей в строке (функция pos), всё что между ними (с учетом длин разделителей, т.к. русский X не один байт...) явлется осмысленным текстом. заодно сразу узнаем длины осмысленного текста и копируем разом, т.к. "посимвольная" склейка строк это очень плохо

смутно припоминаю что уже в 6 tp это было уже так.

там небыло зоопарка кодировок исходников и целевых платформ, всё было в одной
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Lazarus 1.6, обсудим изменения...

Сообщение sts » 18.02.2016 00:18:03

zub писал(а):там небыло зоопарка кодировок исходников и целевых платформ, всё было в одной


и каким боком это считается аргументом против "s[i]=итый_символ" ?

Добавлено спустя 3 минуты 37 секунд:
zub писал(а):Т.е. есть строка...

это тоже никак не относится
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Lazarus 1.6, обсудим изменения...

Сообщение resident » 18.02.2016 00:22:41

sts писал(а):а тут не надо ничего говорить, раз она уже была ранее, значит она должна оставаться и впредь

Ну да, так во всем. Есть какие-то ожидания, если они не оправдываются, то до свиданье! Что с техникой, что с людьми. А я как бы ожидаю от новых версий, что они не будут через колено ломать все мои исходники. Если так, то это уже другой язык и мне невольно опять приходится выбирать. И тут я уже наверняка метнусь в сторону Питона или Жавы. Хотя слышал, что Питон тоже болеет инновациями, какие-то две версии параллельно разрабатывают.

zub писал(а):Я бы сказал по другому - причина компилироваться указанному коду только одна - он компилируется в делфи))

Это серьезная причина, без Делфи Лазарус был бы наааааааафиг никому не нужен изначально.
А тут ситуация выглядит так, как будто или Лазарус стал нереально крут, популярен и творит без оглядки что хочет, либо Дельфи померла окончательно.
Ни первое, ни второе.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Lazarus 1.6, обсудим изменения...

Сообщение zub » 18.02.2016 00:24:20

приведите пример когда это было не эквивалентно во времена однобайтовых\двухбайтовых строк

проблема не в однобайтовости-двухбайтовости, проблема в том что length('Ё')<>1 в обоих случаях, чтоб оно стало еденицей для двухбайтовых строк - нужно указать кодировку исходников и компилятор осуществил перекодировку.
а если указать кодировку исходников, то в LCL везде вылезут крякозяблины, т.к. она пока на это не расчитана
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Lazarus 1.6, обсудим изменения...

Сообщение resident » 18.02.2016 00:28:01

zub писал(а):Т.е. есть строка, есть разделители, есть нужный текст между разделителями...

zub писал(а): явлется осмысленным текстом

Так в и дело, что текст наполовину нужный - в нем замешан хлам - левые буквы, пробелы, знаки и т.п. Да хоть слова.
Как вы от хлама избавитесь?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Lazarus 1.6, обсудим изменения...

Сообщение zub » 18.02.2016 00:33:57

resident писал(а):Это серьезная причина, без Делфи Лазарус был бы наааааааафиг никому не нужен изначально.

В делфи емнип "проще" строка в исходниках - utf8, внутри программы двухбайтовый юникод.
В фпц строка в исхониках в любой поддерживаемой кодировке и чтобы ее перекодировать во внутренний юникод правильно, нужно указать кодировку исходников бомом или директивой. Тогда все наши захардкоженые "Ё" станут юникодными строками.
Но LCL пока неготова к юникодным "Ё" она по старинке ждет строчки в "неподдерживаемой" utf8

Добавлено спустя 1 час 6 минут 53 секунды:
>>Как вы от хлама избавитесь?
ок, можно и пробежать посимвольно. сделано в лоб + я не особый знаток кодировок, конечно найдутся более быстрые варианты или какиенибудь особенности utf8 всё упрощающие
Код: Выделить всё
program Project1;
//{$codepage utf8}//раскоментировать по усмотрению, тогда наверно даже в консольку вывод правильный будет, но и сама проблема отпадет - появится посимвольный доступ
uses sysutils;
const
  byte2=192;//2 байта на символ
  byte3=224;//3 байта на символ
  byte4=240;//4 байта на символ
  byte5=248;//5 байта на символ
  byte6=252;//6 байта на символ
function StringCleanUp(s:string):string;
var len,code:integer;
  procedure CountDigits;
  var i:integer;
  begin
    i:=1;
    len:=0;
    while i<=length(s) do
    begin
      code:=ord(s[i]);
      case code of
      1..127:
        begin
          if code in [ord('0')..ord('9')] then
          begin
               inc(len);
               if length(result)>=len then
                                          result[len]:=chr(code);
          end;
          inc(i);
        end;
      else
        if (code and byte2)=byte2 then
                                      inc(i,2)
   else if (code and byte3)=byte3 then
                                      inc(i,3)
   else if (code and byte4)=byte4 then
                                      inc(i,4)
   else if (code and byte5)=byte5 then
                                      inc(i,5)
   else if (code and byte6)=byte6 then
                                      inc(i,6)
   else
       inc(i);//значит чето пошло не так
      end;
    end;

  end;
begin
  CountDigits;
  if len>0 then
  begin
    setlength(result,len);
    CountDigits;
  end;
end;
procedure DebugCleanup(s:string);
begin
  writeln(format('s=''%s'';result=''%s''',[s,StringCleanUp(s)]));
end;
begin
   DebugCleanup('s1 ф00');
   DebugCleanup('2 わ た0 0');
   DebugCleanup('3ф0  0わた');
   readln;
end.


После запила полноценного юникода в lcl нужда в таких вещах отпадет, или останется только в случае невалидных строк полученых программой извне, и всё станет как в делфи))

Добавлено спустя 8 минут 24 секунды:
Это серьезная причина, без Делфи Лазарус был бы наааааааафиг никому не нужен изначально.

Ну не скажите, комуто мешает нормальная кроссплатформенная реализация паскаля?
Кстати, я не проверял, возможно исходной проблеме поможет директива {$mode delphiunicode} ? это конечно не решение, а так, для понимания в каких направлениях развивается fpc
Последний раз редактировалось zub 18.02.2016 02:42:41, всего редактировалось 2 раз(а).
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: Lazarus 1.6, обсудим изменения...

Сообщение pupsik » 18.02.2016 02:03:30

Допустим, там я увижу string.

Я увидел там стринг... Не допустим, а можно ссылку "пнуть"....
Я не знаю как у вас такой скрин появился.... Возможно и было такое. Но: сколько раз не натыкался на вики там все нормально описано.

Что и где я должен здесь преобразовать, чтобы она заработала?

Код: Выделить всё
convertEncoding(StringReplace('эЭяЯюЮ', 'я', 'ы', [rfReplaceAll, rfIgnoreCase]), guessEncoding(s), encodingAnsi);
этот кошмар советуют на англоязычном форуме пользовать. Проверьте. Я StringReplace редко пользуюсь. Точнее о..очень редко :)

Разве такой даунгрейд возможен?
я этот гРейд часто на форумах видел... "человек с улицы" не будет браться за что то без необходимости. Если надо - разберется или "спрыгнет" туда куда его тянет. За сим есть право выбора.

п.с.
По поводу скрина sourceforge :))) Я лазарь из свн беру (инсталяшку с фтп). И никогда не брал из sourceforge...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Lazarus 1.6, обсудим изменения...

Сообщение zub » 18.02.2016 02:29:11

sts писал(а):
zub писал(а):там небыло зоопарка кодировок исходников и целевых платформ, всё было в одной


и каким боком это считается аргументом против "s[i]=итый_символ" ?

Добавлено спустя 3 минуты 37 секунд:
zub писал(а):Т.е. есть строка...

это тоже никак не относится


для utf8 "s[i]=итый_символ" значит либо потерю экономичности utf8 либо жуткую тормознутость при таком доступе. Почему изза чъихто хотелок, которые в большинстве случаев необоснованы, должны страдать все остальные? Пишите свою надстройку (или используйте готовые в виде utf8pos, utf8length...), а не смотрите косо на компилятор
Считали вы что s[i] это итый символ совершенно напрасно, даже в лохматые годы TP в строчках можно было встретить ескапе последовательности, например раскрашивающие текст - байтики занимают а символами не являются... В любом юникоде найдутся какиенибудь цвета кожи для эмоджи рушащие "идилию" посимвольной индексации, не нужно на это расчитывать
>>это тоже никак не относится
Это относится к тому что для парсинга "посимвольная" индексация ненужна
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Пред.След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru