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

Вернуться   Форум 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.
Просмотров: 202701
 
Непрочитано 14.08.2008, 14:05
#521
OHUKC


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


ОГРОМНОЕ СПАСИБО
OHUKC вне форума  
 
Непрочитано 14.08.2008, 17:00
#522
CB

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


> dextron3
Лисп по поводу #518. Работает и Mtext'ом
Первый текст может быть и в виде "L=234мм" - из него вытянется число и вставится во второй текст/mtext, который может быть тоже любого вида...
Код:
[Выделить все]
(defun C:TEST (/ rec-pat value obj lst-name)
  (defun rec-pat (str / rec-pat)
    (defun rec-pat (temp str pat n /)
      (cond
 ((= str "") (list temp))
 ((if (minusp n)
    (not (wcmatch (substr str 1 1) pat))
    (wcmatch (substr str 1 1) pat)
  ) ;_ end of if
  (if (/= temp "")
    (cons temp (rec-pat "" str pat (- n)))
    (rec-pat "" str pat (- n))
  ) ;_ end of if
 )
 (t
  (rec-pat (strcat temp (substr str 1 1))
    (substr str 2)
    pat
    n
  ) ;_ end of rec-pat
 )
      ) ;_ end of cond
    ) ;_ end of defun
    (rec-pat "" str "[1234567890.]" 1)
  ) ;_ end of defun
  (vl-load-com)
  (setq value
  (apply
    'strcat
    (apply
      '(lambda (a b)
  (mapcar
    '(lambda (str_b)
       (if
         (and
    (equal "" (vl-string-left-trim "0123456789." str_b))
    (not (equal (chr 46) str_b))
         ) ;_ end of and
;;;Снос форматирования с первого Mtext'а
   (apply
     'strcat
     (mapcar
       '(lambda (str_a)
          (if
     (and
       (equal
         ""
         (vl-string-left-trim "0123456789." str_a)
       ) ;_ end of equal
       (not (equal (chr 46) str_a))
     ) ;_ end of and
      str_a
      ""
          ) ;_ end of if
        ) ;_ end of lambda
       a
     ) ;_ end of mapcar
   ) ;_ end of apply
;;;-----------------------------
   str_b
       ) ;_ end of if
     ) ;_ end of lambda
    b
  ) ;_ end of mapcar
       ) ;_ end of lambda
      (mapcar
        '(lambda (a)
    (rec-pat (cdr (assoc 1 (entget a))))
  ) ;_ end of lambda
        (setq lst-name
        (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 vl-string-search
          ) ;_ end of and
        ) ;_ end of not
      ) ;_ end of while
      obj
    ) ;_ end of lambda
   (list
     "Выберите текст А :"
     "Выберите текст В :"
   ) ;_ end of list
        ) ;_ end of mapcar
        ) ;_ end of setq
      ) ;_ end of mapcar
    ) ;_ end of apply
  ) ;_ end of apply
  ) ;_ end of setq
  (if (vlax-write-enabled-p
 (setq obj (vlax-ename->vla-object (cadr lst-name)))
      ) ;_ end of vlax-write-enabled-p
    (progn
      (vlax-put-property obj 'TextString value)
      (vlax-release-object obj)
    ) ;_ progn
  ) ;_ if
  (princ)
) ;_ defun
CB вне форума  
 
Непрочитано 14.08.2008, 17:06
#523
OHUKC


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


а не подскажешь , какие строчки надо добавить , чтоб число вставлялось в текст вида "345,6 м.п.", заменяя тока число 345,6 а м.п.
оставляло ....?????....пост №495....
OHUKC вне форума  
 
Непрочитано 14.08.2008, 19:02
#524
dextron3

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


CB, спасибище!
а можно сделать чтобы при выборе первой цыфры както лисп давал знать о выборе, к примеру выделял или рамкой, а то в командную строку пиходится смотреть выбрал или нет узнавать
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 14.11.2008, 23:33
#525
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


VVA
Пытался добавить в код армянские термины, чтобы командой spec5d можно было рассчитать и их.
Со всем вроде получилось, а вот с фланцем не то. Армянские слова записываются к примеру так:
\U0547\U0580\U057b\U0561\U0576

Вот участок кода в который я пытаясь вклинить армянский термин

Код:
[Выделить все]
;;;======= СТАЛЬ ЛИСТОВАЯ ДЛЯ ФЛАНЦЕВЫХ ДЕТАЛЕЙ ?
    ((vl-position (car WHAT) '("ФЛ" "FL" "ФЛАНЕЦ")) ;_Сталь листовая
    (setq L (vl-string-translate "X" "Х" (car(str-str-lst (cadr what) " ")))) ;;;_ Заменяем  английское X на русское Х на у первых символов до пробела
    (setq L (str-str-lst L "Х"))
                      ;;;Вес стали для фланцев определяем как Пи умножить на 0.5 диаметра в квадрате умножить на длину и на *STAL*
                      ;;;Диаметр - большее число, длина - меньнее
                     (setq L     (mapcar 'atof L))
                     (setq Diam  (apply 'max L) ;_ диаметр
                           sH (apply 'min L) ;_ длинна
                           )
    (setq *MPROF* (STRCAT "Лист " (dwgru-string-replace (rtos Sh 2 0) ".0" "")))
                      (setq ves_det_1 (* pi 0.25 Diam Diam sH *STAL*)
                            ves_det_1   (if (_get_sumT_Ves1)(atof(_sumT_Ves_okr ves_det_1)) ves_det_1)
                            ves_det_all (* count ves_det_1))
                    )
Вот мой вариант, который почему-то не работает

Код:
[Выделить все]
;;;======= СТАЛЬ ЛИСТОВАЯ ДЛЯ ФЛАНЦЕВЫХ ДЕТАЛЕЙ ?
    ((vl-position (car WHAT) '("ФЛ" "FL" "ФЛАНЕЦ" "\U0547\U0580\U057b\U0561\U0576")) ;_Сталь листовая
    (setq L (vl-string-translate "X" "Х" (car(str-str-lst (cadr what) " ")))) ;;;_ Заменяем  английское X на русское Х на у первых символов до пробела
    (setq L (str-str-lst L "Х"))
                      ;;;Вес стали для фланцев определяем как Пи умножить на 0.5 диаметра в квадрате умножить на длину и на *STAL*
                      ;;;Диаметр - большее число, длина - меньнее
                     (setq L     (mapcar 'atof L))
                     (setq Diam  (apply 'max L) ;_ диаметр
                           sH (apply 'min L) ;_ длинна
                           )
    (setq *MPROF* (STRCAT "Лист " (dwgru-string-replace (rtos Sh 2 0) ".0" "")))
                      (setq ves_det_1 (* pi 0.25 Diam Diam sH *STAL*)
                            ves_det_1   (if (_get_sumT_Ves1)(atof(_sumT_Ves_okr ves_det_1)) ves_det_1)
                            ves_det_all (* count ves_det_1))
                    )
Как сделать это правильно?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 15.11.2008, 15:19
#526
dextron3

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


Red Nova, можешь показать как на армянском выглядят чертежи, а то кроме русского немецкого и английского не видел, можно скриншотами..
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 15.11.2008, 19:56
#527
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


И казахские тоже не видел?
Вложения
Тип файла: pdf Example Arm project.pdf (331.7 Кб, 191 просмотров)
__________________
Блог
Red Nova вне форума  
 
Непрочитано 15.11.2008, 20:01
#528
dextron3

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


Red Nova, тут вообще кроме цыфр ничего не понять, у Вас с лева на право пишут? поэтому наверное лисп не работает

у нас все на русском идет еще с советского союза...
__________________
инженер проектировшик с опттом программа авто гад образование высшие
dextron3 вне форума  
 
Автор темы   Непрочитано 15.11.2008, 22:37
#529
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


dextron3, Это лист из старого проекта, без СПДС.
Пишут у нас конечно же с лево на право, и к работе лиспа это не имеет отношения.

VVA Я приблизительно чувствую почему у меня не выходит с кодом. В этой строчке ты записал все обозначения исключительно заглавными,
Код:
[Выделить все]
("ФЛ" "FL" "ФЛАНЕЦ")
но если в спецификации записать не ФЛАНЕЦ а Фланец, то программа это понимает. Это значит, что каким то образом происходит отождествление заглавных и прописных. Но если в лиспе записать
Код:
[Выделить все]
("ФЛ" "FL" "Фланец")
то лисп не понимает спецификаций с записями ФЛАНЕЦ или Фланец, то есть можно использовать только заглавные.
С армянским скорее всего лажа именно тут. Код не может отличить заглавные и прописные буквы армянского алфавита. Так что же делать?
Уточню также что с трубами и с профильными листами у меня все работает и на армянском. Проблема только с фланцем.
__________________
Блог
Red Nova вне форума  
 
Непрочитано 16.11.2008, 13:58
#530
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Перед сравнением все строки с помощью функции strcase приводятся к верхнему регистру. С русским и английским strcase работает корректно. Попробуй с армянским.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.11.2008, 12:13
#531
nem


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


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

например, на чертеже есть следующие м-тексты: к1, т1, хх12, хх14, %%С100.

нужно сосчитать кол-во к1, т1, и сколько всего хх обоих типов, а диаметр 100 не считать совсем.

прошу прощения если это уже есть, а я не нашел.
nem вне форума  
 
Автор темы   Непрочитано 17.11.2008, 13:31
#532
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


VVA, Сорри, не понял. Можно конкретнее, что я должен сделать?
__________________
Блог
Red Nova вне форума  
 
Непрочитано 17.11.2008, 13:38
#533
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Код:
[Выделить все]
(strcase "Фланец")
Вернет "ФЛАНЕЦ". А что вернет strcase если вмето "Фланец" будет армянская строка?
>nem
Диалоговая функция подсчёта вхождений текстовых символов в файле чертежа Оно?
PS Заходи по ссылке через IE
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.11.2008, 16:00
#534
nem


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


VVA, хорошая вещь, но только для обычного текста, а м-текст не замечает...
nem вне форума  
 
Непрочитано 17.11.2008, 17:06
#535
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


nem,
1. Автор лиспа по ссылке #533
2. Еще вариант
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.11.2008, 18:34
#536
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


http://dwg.ru/dnl/3716 - считает тексты, мтексты размеры (переопределенные)
gomer вне форума  
 
Автор темы   Непрочитано 17.11.2008, 20:06
#537
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


VVA,
Беда в том, что армянские символы нужно записывать как
Код:
[Выделить все]
"\U0547\U0580\U057b\U0561\U0576"
Естественно если в ком строку ввести
Код:
[Выделить все]
Command: (strcase "\U0547\U0580\U057b\U0561\U0576")
то вернет
Код:
[Выделить все]
"UU0547UU0580UU057BUU0561UU0576"
Ну или можно так, хотя тольку не прибавится
Код:
[Выделить все]
Command: (strcase "\\U0547\\U0580\\U057b\\U0561\\U0576")
"\\U0547\\U0580\\U057B\\U0561\\U0576"
__________________
Блог
Red Nova вне форума  
 
Непрочитано 18.11.2008, 09:59
#538
nem


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


программа words плохо понимает мультитексты. в частности пробелы игнорируются. и ищет во всем файле сразу. т.е. и в модели, и на листах.
nem вне форума  
 
Непрочитано 18.11.2008, 10:21
#539
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Red Nova, Запусти этот лисп
Код:
[Выделить все]
(strcase(cdr(assoc 1 (entget(car(entsel "\nТкни в армянский текст"))))))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 18.11.2008, 14:19
#540
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, տ.գ.թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,990
Отправить сообщение для Red Nova с помощью Skype™


Вот скриншот.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 128
Размер:	18.4 Кб
ID:	12345  
__________________
Блог
Red Nova вне форума  
Ответ
Вернуться   Форум 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