<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>Комментарии на: Сортировка строк как чисел</title>
	<atom:link href="https://autolisp.ru/2021/03/20/sort-as-numbers/feed/" rel="self" type="application/rss+xml" />
	<link>https://autolisp.ru/2021/03/20/sort-as-numbers/</link>
	<description>LISP для AutoCAD</description>
	<lastBuildDate>Tue, 24 Feb 2026 16:11:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
	<item>
		<title>От: Кулик Алексей aka kpblc</title>
		<link>https://autolisp.ru/2021/03/20/sort-as-numbers/comment-page-1/#comment-97028</link>
		<dc:creator><![CDATA[Кулик Алексей aka kpblc]]></dc:creator>
		<pubDate>Thu, 24 Jun 2021 08:21:59 +0000</pubDate>
		<guid isPermaLink="false">https://autolisp.ru/?p=4193#comment-97028</guid>
		<description><![CDATA[Возможно. Но какое это имеет отношение к сортировке строк как чисел?]]></description>
		<content:encoded><![CDATA[<p>Возможно. Но какое это имеет отношение к сортировке строк как чисел?</p>
]]></content:encoded>
	</item>
	<item>
		<title>От: Елена</title>
		<link>https://autolisp.ru/2021/03/20/sort-as-numbers/comment-page-1/#comment-97025</link>
		<dc:creator><![CDATA[Елена]]></dc:creator>
		<pubDate>Thu, 24 Jun 2021 07:39:19 +0000</pubDate>
		<guid isPermaLink="false">https://autolisp.ru/?p=4193#comment-97025</guid>
		<description><![CDATA[Есть лисп подсчета суммы чисел (размеров) с выводом суммы. Возможно ли вывод суммы записать строкой выбранных чисел, например, 10+20+30=60?
;&#124;============= Команда SumT ================================== 
  Назначение:  Суммирование Тектса,Мтекста, Размеров указанием или рамкой.
               Угловые размеры игнорируются
  Особенности: Безразлична к разделителям точка или запятая. 
               Ввиду особенности работы atof стоки вида &quot;22.3мама&quot; 
               будут учтены как число 22.3
 
               При выводе результата число округляется в соответствии 
               с текущими установками переменной LUPREC. Команда _UNITS 
&#124;; 
(defun c:sumT ( / res selset ins_pt txt_height blk obj ed *error*)
  (defun *error* (msg)
    (setvar &quot;NOMUTT&quot; 0)  ;_ Восстанавливаем NOMUTT
    (princ msg)
    )
 (vl-load-com)(setq res 0.)
 (princ &quot;\nВыберите тексты или размеры: &quot;)
  (setvar &quot;NOMUTT&quot; 1)  ;_ Отключаем NOMUTT
  (setq selset (ssget &#039;((0 . &quot;TEXT,MTEXT,*DIMENSION&quot;))))
  (setvar &quot;NOMUTT&quot; 0)  ;_ Восстанавливаем NOMUTT
 (if  selset
    (foreach ent (vl-remove-if &#039;listp (mapcar &#039;cadr (ssnamex selset)))
     (setq obj (vlax-ename-&gt;vla-object ent)
           ed (entget ent)
           ) 
     (if (and (wcmatch (cdr(assoc 0 ed)) &quot;*DIMENSION&quot;)
              (or
                (member &#039;(100 . &quot;AcDbAlignedDimension&quot;) ed)  ;_Параллельный или линейный
                (member &#039;(100 . &quot;AcDbDiametricDimension&quot;) ed);_Диаметр
                (member &#039;(100 . &quot;AcDbRadialDimension&quot;) ed)   ;_Радиус
                (member &#039;(100 . &quot;AcDbArcDimension&quot;) ed)      ;_Дуговой
                )
              )
       (progn
         (setq blk
             (vla-item (vla-get-blocks
                         (vla-get-activedocument (vlax-get-acad-object))
                       ) ;_ end of vla-get-Blocks
                       (cdr (assoc 2 ed))
             ) ;_ end of vla-item
      ) ;_ end of setq
      (vlax-for item blk
        (if (= (vla-get-objectname item) &quot;AcDbMText&quot;)
          (setq obj item)
          )
         )
       )
       )
     (if (vlax-property-available-p obj &#039;Textstring)
       (progn
     (setq str (str-str-lst (vla-get-textstring obj) &quot;\\P&quot;)
     str (mapcar &#039;(lambda(x)(mip_mtext_unformat x)) str)
      str (mapcar &#039;(lambda(x)(vl-string-translate &quot;,&quot; &quot;.&quot; (vl-string-trim  &quot;%UuoOcC \t&quot;   x))) str)
      str (mapcar &#039;(lambda(x)(vl-string-trim  &quot;%UuoOcC \t&quot;   x)) str)
     res (+ res (apply &#039;+ (mapcar &#039;atof str))))
     )
       )
      ) ;_ end of foreach 
    ) ;_ end of if 
  (princ &quot;\nРезультат=&quot;)(princ (rtos res 2)) 
  (if (not (equal res 0. 1e-3)) 
    (progn 
      (if (= (cdr (assoc 40 (tblsearch &quot;STYLE&quot; (getvar &quot;TEXTSTYLE&quot;)))) 0.0) ;_ end of =
        (progn ;; нулевая высота текста
   (if (not (setq txt_height (getreal &quot;\nВведите высоту текста  : &quot;)))(setq txt_height 250)) 
          (vl-cmdf &quot;_.TEXT&quot; &quot;0,0&quot; txt_height 0 (rtos res 2))) ;_ end of progn
        (progn ;; фиксированнная высота
          (vl-cmdf &quot;_.TEXT&quot; &quot;0,0&quot; 0 txt (rtos res 2))) ;_ end of progn
         )
      (command &quot;_.copybase&quot; &quot;0,0&quot; (entlast) &quot;&quot; &quot;_.erase&quot; (entlast) &quot;&quot; &quot;_.pasteclip&quot; pause) 
      ) ;_ end of progn 
    ) ;_ end of if 
   (princ) 
  ) 
(princ &quot;\nНаберите в командной строке SumT&quot;)
(defun mip_MTEXT_Unformat ( Mtext / text Str )
  (setq Text &quot;&quot;)
   (while (/= Mtext &quot;&quot;)
        (cond
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) &quot;\\[\\{}]&quot;)
            (setq Mtext (substr Mtext 3) Text   (strcat Text Str)))
          ((wcmatch (substr Mtext 1 1) &quot;[{}]&quot;)(setq Mtext (substr Mtext 2)))
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) &quot;\\[LO`~]&quot;)
    (setq Mtext (substr Mtext 3)))
          ((wcmatch (strcase (substr Mtext 1 2)) &quot;\\[ACFHQTW]&quot;)
            (setq Mtext (substr Mtext (+ 2 (vl-string-search &quot;;&quot; Mtext)))))
          ((wcmatch (strcase (substr Mtext 1 2)) &quot;\\P&quot;)
            (if (or(= &quot; &quot; (substr Text (strlen Text)))
     (= &quot; &quot; (substr Mtext 3 1)))
               (setq Mtext (substr Mtext 3))
               (setq Mtext (substr Mtext 3) Text (strcat Text &quot; &quot;))))
   ((wcmatch (strcase (substr Mtext 1 2)) &quot;\\S&quot;)
            (setq Str   (substr Mtext 3 (- (vl-string-search &quot;;&quot; Mtext) 2))
                  Text  (strcat Text (vl-string-translate &quot;#^\\&quot; &quot;/^\\&quot; Str))
                  Mtext (substr Mtext (+ 4 (strlen Str)))))
   (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))
   ))
  Text
  )
;&#124;
* Ф-ция str-str-lst
* Сервисная ф-ция извлечения из строки данных, разделенных
* каким либо символом или строкой символов
* Возвращает список строк
* Аргументы [Type]:
  str - строка для разбора [STRING]
  pat - разделитель [STRING]
*  Пример запуска
  (setq str &quot;мы;изучаем;рекурсии&quot; pat &quot;;&quot;)
  (setq str &quot;мы — изучаем — рекурсии&quot; pat &quot; — &quot;)
  (str-str-lst str pat)
* Читать подробнее http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT
&#124;;
(defun str-str-lst (str pat / i)
  (cond ((= str &quot;&quot;) nil)
        ((setq i (vl-string-search pat str))
         (cons (substr str 1 i)
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)
         ) ;_  cons
        )
        (t (list str))
  ) ;_  cond
) ;_  defun]]></description>
		<content:encoded><![CDATA[<p>Есть лисп подсчета суммы чисел (размеров) с выводом суммы. Возможно ли вывод суммы записать строкой выбранных чисел, например, 10+20+30=60?<br />
;|============= Команда SumT ==================================<br />
  Назначение:  Суммирование Тектса,Мтекста, Размеров указанием или рамкой.<br />
               Угловые размеры игнорируются<br />
  Особенности: Безразлична к разделителям точка или запятая.<br />
               Ввиду особенности работы atof стоки вида "22.3мама"<br />
               будут учтены как число 22.3</p>
<p>               При выводе результата число округляется в соответствии<br />
               с текущими установками переменной LUPREC. Команда _UNITS<br />
|;<br />
(defun c:sumT ( / res selset ins_pt txt_height blk obj ed *error*)<br />
  (defun *error* (msg)<br />
    (setvar "NOMUTT" 0)  ;_ Восстанавливаем NOMUTT<br />
    (princ msg)<br />
    )<br />
 (vl-load-com)(setq res 0.)<br />
 (princ "\nВыберите тексты или размеры: ")<br />
  (setvar "NOMUTT" 1)  ;_ Отключаем NOMUTT<br />
  (setq selset (ssget '((0 . "TEXT,MTEXT,*DIMENSION"))))<br />
  (setvar "NOMUTT" 0)  ;_ Восстанавливаем NOMUTT<br />
 (if  selset<br />
    (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset)))<br />
     (setq obj (vlax-ename-&gt;vla-object ent)<br />
           ed (entget ent)<br />
           )<br />
     (if (and (wcmatch (cdr(assoc 0 ed)) "*DIMENSION")<br />
              (or<br />
                (member '(100 . "AcDbAlignedDimension") ed)  ;_Параллельный или линейный<br />
                (member '(100 . "AcDbDiametricDimension") ed);_Диаметр<br />
                (member '(100 . "AcDbRadialDimension") ed)   ;_Радиус<br />
                (member '(100 . "AcDbArcDimension") ed)      ;_Дуговой<br />
                )<br />
              )<br />
       (progn<br />
         (setq blk<br />
             (vla-item (vla-get-blocks<br />
                         (vla-get-activedocument (vlax-get-acad-object))<br />
                       ) ;_ end of vla-get-Blocks<br />
                       (cdr (assoc 2 ed))<br />
             ) ;_ end of vla-item<br />
      ) ;_ end of setq<br />
      (vlax-for item blk<br />
        (if (= (vla-get-objectname item) "AcDbMText")<br />
          (setq obj item)<br />
          )<br />
         )<br />
       )<br />
       )<br />
     (if (vlax-property-available-p obj 'Textstring)<br />
       (progn<br />
     (setq str (str-str-lst (vla-get-textstring obj) "\\P")<br />
     str (mapcar '(lambda(x)(mip_mtext_unformat x)) str)<br />
      str (mapcar '(lambda(x)(vl-string-translate "," "." (vl-string-trim  "%UuoOcC \t"   x))) str)<br />
      str (mapcar '(lambda(x)(vl-string-trim  "%UuoOcC \t"   x)) str)<br />
     res (+ res (apply '+ (mapcar 'atof str))))<br />
     )<br />
       )<br />
      ) ;_ end of foreach<br />
    ) ;_ end of if<br />
  (princ "\nРезультат=")(princ (rtos res 2))<br />
  (if (not (equal res 0. 1e-3))<br />
    (progn<br />
      (if (= (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))) 0.0) ;_ end of =<br />
        (progn ;; нулевая высота текста<br />
   (if (not (setq txt_height (getreal "\nВведите высоту текста  : ")))(setq txt_height 250))<br />
          (vl-cmdf "_.TEXT" "0,0" txt_height 0 (rtos res 2))) ;_ end of progn<br />
        (progn ;; фиксированнная высота<br />
          (vl-cmdf "_.TEXT" "0,0" 0 txt (rtos res 2))) ;_ end of progn<br />
         )<br />
      (command "_.copybase" "0,0" (entlast) "" "_.erase" (entlast) "" "_.pasteclip" pause)<br />
      ) ;_ end of progn<br />
    ) ;_ end of if<br />
   (princ)<br />
  )<br />
(princ "\nНаберите в командной строке SumT")<br />
(defun mip_MTEXT_Unformat ( Mtext / text Str )<br />
  (setq Text "")<br />
   (while (/= Mtext "")<br />
        (cond<br />
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")<br />
            (setq Mtext (substr Mtext 3) Text   (strcat Text Str)))<br />
          ((wcmatch (substr Mtext 1 1) "[{}]")(setq Mtext (substr Mtext 2)))<br />
          ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[LO`~]")<br />
    (setq Mtext (substr Mtext 3)))<br />
          ((wcmatch (strcase (substr Mtext 1 2)) "\\[ACFHQTW]")<br />
            (setq Mtext (substr Mtext (+ 2 (vl-string-search ";" Mtext)))))<br />
          ((wcmatch (strcase (substr Mtext 1 2)) "\\P")<br />
            (if (or(= " " (substr Text (strlen Text)))<br />
     (= " " (substr Mtext 3 1)))<br />
               (setq Mtext (substr Mtext 3))<br />
               (setq Mtext (substr Mtext 3) Text (strcat Text " "))))<br />
   ((wcmatch (strcase (substr Mtext 1 2)) "\\S")<br />
            (setq Str   (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))<br />
                  Text  (strcat Text (vl-string-translate "#^\\" "/^\\" Str))<br />
                  Mtext (substr Mtext (+ 4 (strlen Str)))))<br />
   (t (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2)))<br />
   ))<br />
  Text<br />
  )<br />
;|<br />
* Ф-ция str-str-lst<br />
* Сервисная ф-ция извлечения из строки данных, разделенных<br />
* каким либо символом или строкой символов<br />
* Возвращает список строк<br />
* Аргументы [Type]:<br />
  str - строка для разбора [STRING]<br />
  pat - разделитель [STRING]<br />
*  Пример запуска<br />
  (setq str "мы;изучаем;рекурсии" pat ";")<br />
  (setq str "мы — изучаем — рекурсии" pat " — ")<br />
  (str-str-lst str pat)<br />
* Читать подробнее <a href="http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT" rel="nofollow">http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25113OT</a><br />
|;<br />
(defun str-str-lst (str pat / i)<br />
  (cond ((= str "") nil)<br />
        ((setq i (vl-string-search pat str))<br />
         (cons (substr str 1 i)<br />
               (str-str-lst (substr str (+ (strlen pat) 1 i)) pat)<br />
         ) ;_  cons<br />
        )<br />
        (t (list str))<br />
  ) ;_  cond<br />
) ;_  defun</p>
]]></content:encoded>
	</item>
</channel>
</rss>
