Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций) - Страница 26
Реклама i
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)

Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)

Ответ
Поиск в этой теме
Старый 26.01.2008, 13:15
Расчет спецификаций из мтекстов
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,990

Я не пользуюсь таблицами AutoCADа, черчу ячейки, в них по мтексту. Вопрос как оперативно соcчитать сумму цифр их содержимого. Слышал есть такой калькулятор, по моему calcacad называется, но на 2008-й Cad не идет. Что делать?

Добавлено.
Постепенно форум перешел в разработку липа для расчета спецификаций из мтекстов, и расчет суммы из мтекстов стал просто полезной добавкой к расчету спецификации. Последний вариант программы находится тут

Последний раз редактировалось Red Nova, 13.03.2009 в 10:11.
Просмотров: 203882
 
Непрочитано 12.08.2008, 15:44
#501
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


не ...не получается
OHUKC вне форума  
 
Непрочитано 12.08.2008, 15:56
#502
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


перезагрузи заново лисп или АвтоКАД
skkkk вне форума  
 
Непрочитано 12.08.2008, 15:57
#503
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


....конечно делал .....
не там точность где-то в коде задается...
OHUKC вне форума  
 
Непрочитано 12.08.2008, 16:02
#504
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


чё-то я туплю))...он по-моему ти так до 4-ого знака округляет...
но всё-равно хотелось бы узнать где точность задаётся...
OHUKC вне форума  
 
Непрочитано 12.08.2008, 17:08
#505
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Аха, а теперь измени в строке
Код:
[Выделить все]
(command "luprec" 4)
четверку на двойку, сохрани изменения в lsp-файле, загрузи его заново и попробуй.Будет два знака после запятой.
Я проверял на лиспе #495 от CB.
skkkk вне форума  
 
Непрочитано 12.08.2008, 17:31
#506
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


CB, а трудно переделать под задачу из #494?
skkkk вне форума  
 
Непрочитано 12.08.2008, 18:14
#507
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Вообще-то в данном случае за точность отвечает ф-ция (rtos number [mode [precision]]).
Код:
[Выделить все]
  (setq value
   (rtos
(/
    (apply
'((lambda () (eval (read action))))
.............................................
(if devide 1000. 1.)
)
    2 4   ;;;это надо добавить (4 - кол. знаков)
    ) ;_ rtos
  ) ;_ setq
Ну и если нужны нули (например 35.0000) тогда правильно нужно dimzin обнулить - (setvar 'dimzin 0)
CB вне форума  
 
Непрочитано 12.08.2008, 18:37
#508
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


> skkk
Цитата:
не могли бы вы помимо задачи OHUKCA немного усложнить данный лисп
Данный лисп переделать нельзя, т.к. в нем совершенно другой способ выбора оъектов по сравнению с тем, что ты хочешь <кликаем а, b, c,> А сделать другой, слегка переделав данный совершенно не сложно... Правда сейчас я уже собираюсь домой, так что завтра...
CB вне форума  
 
Непрочитано 12.08.2008, 21:43
#509
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


> skkk
Код:
[Выделить все]
(defun c:z-calc-text-value_1 (/ value ent obj)
  (vl-load-com)
  (princ
    "\nВыберите текстовые объекты среди которых будет произведененна калькуляция"
  ) ;_ end of princ
  (setq value
  (rtos
    (apply
      '(lambda (a b c) (* (abs (/ (- a b) c)) 1000.))
      (mapcar
        (function
   (lambda (a)
     (atof
       (vl-string-trim
         "%Uu {\\Ll}"
         (vl-string-subst
    "."
    ","
    (mip_MTEXT_Unformat
      (cdr (assoc 1 (entget a)))
    ) ;_Снос форматирования
         ) ;_ vl-string-subst
       ) ;_ vl-string-trim
     ) ;_ atof
   ) ;_ lambda
        ) ;_ function
        (mapcar
   '(lambda (x / obj)
      (princ (strcat "\n" x))
      (while
        (not
   (and (setq obj
        (car (entsel (princ (strcat "\r" x))))
        ) ;_ end of setq
        (vl-string-search "TEXT" (cdr (assoc 0 (entget obj))))
   ) ;_ end of and
        ) ;_ end of not
      ) ;_ end of while
      obj
    ) ;_ end of lambda
   (list
     "Текст А :"
     "Текст B :"
     "Текст C :"
   ) ;_ end of list
        ) ;_ end of mapcar
      ) ;_ mapcar
    ) ;_ apply
  ) ;_ end of rtos
  ) ;_ end of setq
  (if (vl-string-position (ascii ".") value)
    (setq value (vl-string-right-trim ".0" value))
  ) ;_ if
  (princ (strcat "\nРезультат = " value))
  (alert (strcat "Результат = " value))
  (setvar "ERRNO" 0)
  (while
    (and (not (setq ent
       (car
         (nentsel
    (strcat
      "\n Выберите текстовый объект для записи значения <Выход>:"
    ) ;_ strcat
         ) ;_ entsel
       ) ;_ car
       ) ;_ setq
  ) ;_ not
  (equal (getvar "ERRNO") 7)
    ) ;_ and
     (setvar "ERRNO" 0)
  ) ;_ while
  (if (and ent
    (vlax-property-available-p
      (setq obj (vlax-ename->vla-object ent))
      'TextString
    ) ;_ vlax-property-available-p
    (vlax-write-enabled-p obj)
      ) ;_ and
    (progn
      (vlax-put-property obj 'TextString value)
      (vla-put-color obj 3) ;_Цвет текста 3 - зеленый
      (vlax-release-object obj)
    ) ;_ progn
  ) ;_ if
  (princ)
  ) ;_ defun
(defun mip_MTEXT_Unformat ( Mtext / text Str )
  (setq Text "")
   (while (/= Mtext "")
        (cond
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")
            (setq Mtext (substr Mtext 3) Text   (strcat Text Str)))
          ((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")
    (setq Mtext (substr Mtext 3)))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")
            (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))
          ((wcmatch (strcase (substr Mtext 1 2)) "\\P")
            (if (or(= " " (substr Text (strlen Text)))
     (= " " (substr Mtext 3 1)))
               (setq Mtext (substr Mtext 3))
               (setq Mtext (substr Mtext 3) Text (strcat Text " "))))
   ((wcmatch (strcase (substr Mtext 1 2)) "\\S")
            (setq Str   (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
                  Text  (strcat Text (vl-string-translate "#^\\" "/^\\" Str))
                  Mtext (substr Mtext (+ 4 (strlen Str)))))
   (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))
   ))
  Text
)

Последний раз редактировалось CB, 13.08.2008 в 08:28. Причина: Редактирование кода по #512
CB вне форума  
 
Непрочитано 12.08.2008, 23:27
#510
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


CB, фрагмент комстроки:
Код:
[Выделить все]
Команда: _appload slope.lsp успешно загружено.


Команда: ; ошибка: лишняя закрывающая скобка на входе

Команда:
Команда: z-calc-text-value_1

Выберите текстовые объекты среди которых будет произведененна калькуляция
Текст А :
Текст B :
Текст C :; ошибка: no function definition: MIP_MTEXT_UNFORMAT

Команда:
:-(
А вот какая из них?? Не сообразил
После выбора текста С вылетает

Добавлено:
Посидел в лисп-редакторе, накопал лишнюю закрывающую скобку. Ctrl+[ показал, что она тут (красная):
Код:
[Выделить все]
(princ)
  ) ;_ defun
(defun mip_MTEXT_Unformat ( Mtext / text Str )
Не уверен, но кажется тут вкралась ошибочка:
Код:
[Выделить все]
(nentsel
    (strcat
      "\n Выберите текстовый объект для записи значения <Выход>:"
    ) ;_ strcat
         ) ;_ entsel
но даже после этого:
Код:
[Выделить все]
Команда: _appload slope.lsp успешно загружено.


Команда: ; ошибка: неверное имя переменной в SETQ: (IF (VL-STRING-POSITION 
(ASCII ".") VALUE) (SETQ VALUE (VL-STRING-RIGHT-TRIM ".0" VALUE)))

Команда:
Команда: z-calc-text-value_1

Выберите текстовые объекты среди которых будет произведененна калькуляция
Текст А :
Текст B :
Текст C :; ошибка: no function definition: MIP_MTEXT_UNFORMAT
:-(
Моих мозгов не хватает

Последний раз редактировалось skkkk, 13.08.2008 в 01:08.
skkkk вне форума  
 
Непрочитано 13.08.2008, 00:28
#511
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Даже 2 лишних скобки в конце ф-ции z-calc-text-value_1
Код:
[Выделить все]
..........................................
      (vlax-release-object obj)
    ) ;_ progn
  ) ;_ if
;;;) ;_ progn 
;;;    ) ;_ if
  (princ)
  ) ;_ defun
#509 исправил...
CB вне форума  
 
Непрочитано 13.08.2008, 02:05
#512
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


CB, пока я ковырялся, Вы уже исправили, зря старался в #510.
Проверил, все работает отлично. Дай Бог Вам здоровья, потому что с меня ящик. Куда доставить?? .

Только один нюанс: по задаче было (А-В)/С*1000, а в лиспе получилось +. Я нашел, где подправить, но другие форумчане вдруг запутаются.
Огромное, огромное спасибо!! Вы мне очень помогли.

Добавлено. А можно внести одну поправочку? Если результат получается отрицательным (при В>А), то он вставлялся бы в ответ "по модулю", как говорили у нас на математике в школе, т.е. без знака минус...

Последний раз редактировалось skkkk, 13.08.2008 в 03:31.
skkkk вне форума  
 
Непрочитано 13.08.2008, 08:30
#513
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


> skkk
Исправлено в #509
CB вне форума  
 
Непрочитано 13.08.2008, 13:12
#514
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Спасибо, СВ, работает
skkkk вне форума  
 
Непрочитано 13.08.2008, 18:48
#515
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


CB, помогите еще решить маленькую проблемку лиспом?
__________________
инженер проектировшик с опттом программа авто гад образование высшие

Последний раз редактировалось dextron3, 13.08.2008 в 21:16. Причина: слово маленькую выделил поярче
dextron3 вне форума  
 
Непрочитано 13.08.2008, 20:02
#516
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Нееее... В столь сложной проблеме СВ - не помощник
skkkk вне форума  
 
Непрочитано 13.08.2008, 21:27
#517
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


> dextron3
А если по конкретнее?
CB вне форума  
 
Непрочитано 13.08.2008, 21:40
#518
dextron3

проектировшик
 
Регистрация: 01.01.2007
СССР
Сообщений: 5,149


CB,
это придаток для лиспа из данной темы облегчающий приметивные действа, тоесть:

по типу как работал наш предыдущий лисп

Алгоритм:

1. Выберите число
2. Укажите текст вставки


Число выбирает обычное тоесть 3999, или 3000

А вставляет в текст типа: L=3200мм, заменяет только цыфру

Пример

1. Выберите число (текстовый приметив), выберим к примеру обычное число 1800

2. Укажите текст вставки, выберим к примеру текст L=200мм

после выполнения лиспа результат будет L=1800мм


буду ждать ответа,
если чегото не понятно пишите поясню,

Данный лисп нужен для того чтобы из ведомости деталей, там указаны длины цыфрами, брал длину и вствалял в спецификацию, уже с миллиметрами и т.п.

PS обычно я просто смотрю на эту цыфру запоминаю в голове и вбиваю в спецификаци, а хотелось сделать это автоматически чтобы ускорить процесс проектирования

естественно это нужно в специальности КЖ, КМ...

за ранее спасибо...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Непрочитано 14.08.2008, 10:16
#519
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


Привет СВ, не подскажешь как сделать так, чтоб результат выводился с запятой , а не с точкой??????пост №495.....
OHUKC вне форума  
 
Непрочитано 14.08.2008, 13:46
#520
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Ищешь строки
Код:
[Выделить все]
   (if (vl-string-position (ascii ".") value)
  (setq value (vl-string-right-trim ".0" value))
  ) ;_ if
И меняешь на
Код:
[Выделить все]
  (if (vl-string-position (ascii ".") value)
  (setq value (vl-string-subst "," "." (vl-string-right-trim ".0" value)))
  ) ;_ if
CB вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций)

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Предложения по расчетным моделям сооружений aldt Расчетные программы 8 06.07.2009 17:53
Мониторы LCD CRT Разное 94 17.06.2008 10:51
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46