TAssiFormulaParser

Планы, идеология, архитектура и т.п.

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

TAssiFormulaParser

Сообщение Sharfik » 09.10.2022 20:03:53

TAssiFormulaParser - Парсер математических формул и формул в стиле Excel.
https://github.com/pichugin-m/AssiFParser
Простая вещь, но почему то не нашел готовых решений 4 года назад.

Например, можно парсить вот такие вещи:
Код: Выделить всё
if(
  or(isItemUse();isItemResIncl());
  concat(getparam("DataObject.Description");"; ";if(And(isItemUse();getparam("ShowIncluded"));concat("%bldb;";" %br13;В составе:";"%blde;");""));
  if(
    isItemGroup();
    concat("%bldb;";"{ROWINDEXANEW}. ";getparam("LabelName");"%blde;");
    if(
      isDGroupRow();
      concat("%unlb;";getparam("LabelName");"%unle;");
      ""
      )
    )
)                                     

или
Код: Выделить всё
(2+2)/4
Последний раз редактировалось Sharfik 10.10.2022 01:01:29, всего редактировалось 1 раз.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: TAssiFormulaParser

Сообщение Ichthyander » 09.10.2022 21:25:25

:!: Другое дело! Не пылится, а хостится на гитхабе! Можно давать ссылку на проект, на отдельные файлы или даже на отдельные строки. Если еще работать с гит, то можно иметь доступ к любому коммиту и версии

Добавлено спустя 3 минуты 9 секунд:
Но я бы рекомендовал добавить теги к проекту. https://github.com/pichugin-m/AssiFParser/tags К примеру, FreePascal, Lazarus, Mathemathics, parser и т.д. И добавить релиз https://github.com/pichugin-m/AssiFParser/releases, т.е. exe файл скомпилированный, чтобы интересующийся мог сразу скачать и потестить без компиляции.
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 668
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: TAssiFormulaParser

Сообщение zub » 10.10.2022 00:04:22

немного критики
https://github.com/pichugin-m/AssiFPars ... s.pas#L184
в таких конструкциях UTF8* избыточен, обычный pos сделает тоже быстрее. Мест где нужен именно UTF8 вариант в реальности очень мало
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TAssiFormulaParser

Сообщение Sharfik » 10.10.2022 00:56:50

Ichthyander писал(а):И добавить релиз

Еще одна причина чем он меня раздражал, когда я там регистрировался я это не нашел! на SourceForge было, а там нет.

zub писал(а):в таких конструкциях UTF8* избыточен, обычный pos сделает тоже быстрее. Мест где нужен именно UTF8 вариант в реальности очень мало

Это плохая позиция. Я там по таким граблям ходил, забывая контролировать кодировку, что второй раз не хочу. Во-первых некоторые процедуры есть только в LAZUTF8, а использовать половину процедур из одного модуля, а половину из другого это мягко говоря плохая политика, трешь. Функция StringReplace мне всегда глаза мозолит в этом планет. Во-вторых, разница исчезла только в FPC 3.0. Чем я очень недоволен. Мой опыт перехода Delphi-Lazarus научил программировать ДУМАЯ! Это было до автоматизации. А когда компилятор все делает за тебя, это способ плодить глючные ПО и глупых программистов. Реализация кода должна четко определять на какой глубине используется WinCP, UTF8, ANSII. Из-за этого куча проблем с работой программ в последствии, если программист не учитывает кодировку. Использование DLL - там в обязательном порядке при передачи строки надо делать преобразование, адрес запуска программы - у меня специально в программе директория названа "bin-бин" для отлова багов. Посмотри модуль Zipper, и примеры кода на сайте lazarus. Там продолбали факт что zip работает с определенной кодировкой(не разу не UTF8, CP1251), и надо конвертировать пути в правильную кодировку.
Местами я забываю править, но стараюсь использовать только процедуры одного формата, в рамках конкретных функций. Обратную обертку сделать не проблема.
***Про скорость - когда сделал, то думал будет медленно. Но по факту обработка форматирования таблица для спецификаций/кабельных журналов(думаю знаешь что это), выполняется на этапе расчета формул быстрее всех других этапов подготовки данных, и там придираться можно только к миллисекундам.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: TAssiFormulaParser

Сообщение zub » 10.10.2022 01:26:14

Загляни в UTF8Pos это обертка над обычным Pas с пересчетом результата из codepoint в codeunit. ты просто сравниваешь с 0 тебе без разницы в чем определаена позиция, главное она не нулевая.
Это никак не влияет на кодировку строк, это просто лишние вычисления
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: TAssiFormulaParser

Сообщение Sharfik » 10.10.2022 04:23:48

zub писал(а):Загляни в UTF8Pos это обертка над обычным Pas с пересчетом результата из codepoint в codeunit. ты просто сравниваешь с 0 тебе без разницы в чем определаена позиция, главное она не нулевая.
Это никак не влияет на кодировку строк, это просто лишние вычисления

Еще раз - мне не интересно 25раз ходить по одним и тем же граблям. Для работы с UTF8 есть функции с приставкой UTF8. Точка! Все остальное это регулярные грабли. Ты забудешь зачем и почему ты в конкретном месте поставил неправильную функцию, и начнешь на этом месте тратить СВОЕ время чтобы разобраться в 25ый раз. Оно надо? Все решения должны быть однотипными максимально. Если решение работает, то не надо лезть к кишки функций, которые делали люди более грамотные чем я.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 759
Зарегистрирован: 20.07.2013 01:04:30

Re: TAssiFormulaParser

Сообщение zub » 10.10.2022 12:04:02

Я с тобой не согласен. но хозяин - барин))
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26


Вернуться в Разработки на нашем сайте

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

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

Рейтинг@Mail.ru