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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп - как взять сразу много текстовых объектов в кавычки?

Лисп - как взять сразу много текстовых объектов в кавычки?

Ответ
Поиск в этой теме
Непрочитано 21.10.2023, 12:42 #1
Лисп - как взять сразу много текстовых объектов в кавычки?
Ingpro
 
Регистрация: 11.07.2022
Сообщений: 775

Была тема "как взять сразу много текстовых объектов в скобки"?
https://forum.dwg.ru/showthread.php?t=72403
Подскажите, пожалуйста, как подправить код (автор Oliver_88), чтобы вместо скобок были кавычки.
Спасибо.

Код:
[Выделить все]
 (defun test (/ ssl active_document)
  (vl-load-com)
  (setq active_document (vla-get-activedocument (vlax-get-acad-object)))
  (setq ssl (vla-get-ActiveSelectionSet active_document))
  (vla-Clear ssl)
  (vla-SelectOnScreen ssl (vlax-safearray-fill
			    (vlax-make-safearray
			      vlax-vbInteger
			      '(0 . 0)
			      )
			    '(0)
			    )
    (vlax-safearray-fill
      (vlax-make-safearray
	vlax-vbVariant
	'(0 . 0)
	)
      '("TEXT,MTEXT")
      )
    )
  (vlax-map-collection ssl
    (function
      (lambda (x)
	(bes-put-vla-object-property
	  x
	  "TextString"
	  (strcat "("
		  (bes-get-vla-object-property x "TextString")
		  ")"
		  )
	  )
	)
      )
    )
  )
(defun bes-put-vla-object-property (obj property_name property / prop)
  (if
    (not
      (vl-catch-all-error-p
	(vl-catch-all-apply
	  'eval
	  (list
	    (list
	      (read
		(strcat "vla-put-" property_name)
		)
	      obj
	      property
	      )
	    )
	  )
	
	)
      )
    property
    nil
    )
  )
(defun bes-get-vla-object-property (obj property_name / prop)
  (if
    (equal nil
	   (vl-catch-all-error-p
	     (setq prop
		    (vl-catch-all-apply
		      'eval
		      (list
			(list
			  (read
			    (strcat "vla-get-" property_name)
			    )
			  obj
			  )
			)
		      )
		   )
	     )
	   )
    prop
    nil
    )
  )
Просмотров: 902
 
Непрочитано 21.10.2023, 13:01
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


попробуйте

Код:
[Выделить все]
 27 (strcat "(" 
28           (bes-get-vla-object-property x "TextString") 
29           ")" 
30           ) 
заменить на
Код:
[Выделить все]
 (strcat (chr(34)) (bes-get-vla-object-property x "TextString") (chr(34)))
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.10.2023, 13:21
#3
Ingpro


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


Сергей812, спасибо, но выскакивает ошибка: неверная функция: 34

Код:
[Выделить все]
  (defun testK (/ ssl active_document)
  (vl-load-com)
  (setq active_document (vla-get-activedocument (vlax-get-acad-object)))
  (setq ssl (vla-get-ActiveSelectionSet active_document))
  (vla-Clear ssl)
  (vla-SelectOnScreen ssl (vlax-safearray-fill
			    (vlax-make-safearray
			      vlax-vbInteger
			      '(0 . 0)
			      )
			    '(0)
			    )
    (vlax-safearray-fill
      (vlax-make-safearray
	vlax-vbVariant
	'(0 . 0)
	)
      '("TEXT,MTEXT")
      )
    )
  (vlax-map-collection ssl
    (function
      (lambda (x)
	(bes-put-vla-object-property
	  x
	  "TextString"
	  (strcat (chr(34)) (bes-get-vla-object-property x "TextString") (chr(34)))
	  )
	)
      )
    )
  )
(defun bes-put-vla-object-property (obj property_name property / prop)
  (if
    (not
      (vl-catch-all-error-p
	(vl-catch-all-apply
	  'eval
	  (list
	    (list
	      (read
		(strcat "vla-put-" property_name)
		)
	      obj
	      property
	      )
	    )
	  )
	
	)
      )
    property
    nil
    )
  )
(defun bes-get-vla-object-property (obj property_name / prop)
  (if
    (equal nil
	   (vl-catch-all-error-p
	     (setq prop
		    (vl-catch-all-apply
		      'eval
		      (list
			(list
			  (read
			    (strcat "vla-get-" property_name)
			    )
			  obj
			  )
			)
		      )
		   )
	     )
	   )
    prop
    nil
    )
  )
Ingpro вне форума  
 
Непрочитано 21.10.2023, 14:16
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


упс, в лиспе другой синтаксис - сорри)
вместо (chr(34)) просто (chr 34)
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.10.2023, 16:30
#5
Ingpro


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


Опять та же ошибка: неверная функция: 34

Код:
[Выделить все]
  (defun testK (/ ssl active_document)
  (vl-load-com)
  (setq active_document (vla-get-activedocument (vlax-get-acad-object)))
  (setq ssl (vla-get-ActiveSelectionSet active_document))
  (vla-Clear ssl)
  (vla-SelectOnScreen ssl (vlax-safearray-fill
			    (vlax-make-safearray
			      vlax-vbInteger
			      '(0 . 0)
			      )
			    '(0)
			    )
    (vlax-safearray-fill
      (vlax-make-safearray
	vlax-vbVariant
	'(0 . 0)
	)
      '("TEXT,MTEXT")
      )
    )
  (vlax-map-collection ssl
    (function
      (lambda (x)
	(bes-put-vla-object-property
	  x
	  "TextString"
	  (strcat (chr(34)) (bes-get-vla-object-property x "TextString") (chr34))
	  )
	)
      )
    )
  )
(defun bes-put-vla-object-property (obj property_name property / prop)
  (if
    (not
      (vl-catch-all-error-p
	(vl-catch-all-apply
	  'eval
	  (list
	    (list
	      (read
		(strcat "vla-put-" property_name)
		)
	      obj
	      property
	      )
	    )
	  )
	
	)
      )
    property
    nil
    )
  )
(defun bes-get-vla-object-property (obj property_name / prop)
  (if
    (equal nil
	   (vl-catch-all-error-p
	     (setq prop
		    (vl-catch-all-apply
		      'eval
		      (list
			(list
			  (read
			    (strcat "vla-get-" property_name)
			    )
			  obj
			  )
			)
		      )
		   )
	     )
	   )
    prop
    nil
    )
  )
Ingpro вне форума  
 
Непрочитано 21.10.2023, 16:36
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


кавычки с двух сторон строки, а исправили код только для правой кавычки
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.10.2023, 17:38
#7
Ingpro


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


Делаю так:
Код:
[Выделить все]
 (strcat (chr 34) (bes-get-vla-object-property x "TextString") (chr 34))
Получилось! Спасибо большое, Сергей812.
Интересно, а вид кавычек от чего зависит? « или "
В данном лиспе кавычки типа ", а чтобы были «, что сделать?

Последний раз редактировалось Ingpro, 21.10.2023 в 17:50.
Ingpro вне форума  
 
Непрочитано 21.10.2023, 19:49
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


34 - это десятичный код двойных кавычек в ASCII. Попробуйте коды 171 и 187
Сергей812 вне форума  
 
Автор темы   Непрочитано 21.10.2023, 20:58
#9
Ingpro


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


Пробую
Код:
[Выделить все]
 (strcat (chr 171) (bes-get-vla-object-property x "TextString") (chr 187))
Всё работает - кавычки ёлочки « ».
Спасибо!!!

Последний раз редактировалось Ingpro, 21.10.2023 в 21:06.
Ingpro вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп - как взять сразу много текстовых объектов в кавычки?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Как копировать свойства объекта в AutoCAD 2014 сразу на группу подобных объектов? Modern13 AutoCAD 21 25.04.2017 13:29
Как положить много 2d объектов в одну плоскость в один клик? 88-oy AutoCAD 7 25.10.2016 17:53
как взять сразу много текстовых объектов в скобки? master-lomaster AutoCAD 2 08.09.2011 13:33
Редактирование группы текстовых объектов с минимальной затратой времени FedoZZZ AutoCAD 1 10.12.2008 01:57