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

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

Как найти лишнюю закрывающую скобку на входе?

Ответ
Поиск в этой теме
Непрочитано 08.12.2022, 13:06 #1
Как найти лишнюю закрывающую скобку на входе?
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,079

Помогите найти лишнюю закрывающую скобку на входе в следующем коде:
Код:
[Выделить все]
 
(defun C:SetProp ()
	(while (setq el (car (entsel "\n Выбери объект:")))
	;entsel выдает имя объекта и все остальное, car - Извлекает первый элемент из списка: имя объекта
	;команды которые должны выполняться в цикле пока не будет пустой ввод
	  (setq dan (entget el));получает список с характеристиками примитива
	  (setq name0 (assoc 0 dan)) ;получаем имя объекта
	  (setq name (cdr name0))
	  (princ (strcat " " name))
;;;	  (alert (strcat "Был выбран " name))
	  (princ (strcat (chr 10) "========================================================="))
	  (princ (strcat (chr 10) "Был выбран " name))
	  (setq cLayer0 (assoc 8 dan)) ;получаем имя объекта
	  (setq cLayer (cdr cLayer0))
	  (setq cLWeight0 (assoc 370 dan)) ;получаем текущий вес линии
	  (setq cLWeight (cdr cLWeight0))
	  (setq cLType0 (assoc 6 dan)) ;получаем текущий тип линии
	  (setq cLType (cdr cLType0))  
	  (setq cLTypeScale0 (assoc 48 dan)) ;получаем текущий масштаб типа линии
	  (setq cLTypeScale (cdr cLTypeScale0))
	  (setq cColor0 (assoc 62 dan)) ;получаем текущий цвет
	  (setq cColor (cdr cColor0))
	  (setq cThick0 (assoc 39 dan)) ;получаем текующую толщину
	  (setq cThick (cdr cThick0))
	  
	;Назначим текущим слой выбранного объекта (setvar "clayer" <имя слоя>)
	  (setvar "clayer" cLayer)
	  (princ (strcat (chr 10) "Был назначен текущий слой " (chr 34) cLayer (chr 34)))
	;Назначим текущий вес линий
	  (cond ((eq cLWeight nil)
			(setvar "CELWEIGHT" -1)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоСлою" (chr 34)))
			)
		((eq cLWeight -2)
			(setvar "CELWEIGHT" -2)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоБлоку" (chr 34)))
			)
		((eq cLWeight -3)
			(setvar "CELWEIGHT" -3)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) "ПоУмолчанию" (chr 34)))
			)
		(t 
			(setvar "CELWEIGHT" cLWeight)
			(princ (strcat (chr 10) "Был назначен текущий вес линий " (chr 34) (rtos (/ cLWeight 100.0)) (chr 34)))
		)
	   )
	;Назначим текущий тип линии
	  (cond ((eq cLType nil)
			(setvar "CELTYPE" "ByLayer")
			(princ (strcat (chr 10) "Был назначен текущий тип линий " (chr 34) "ПоСлою" (chr 34)))
			)
		(t 
			(setvar "CELTYPE" cLType)
			(princ (strcat (chr 10) "Был назначен текущий тип линий " (chr 34) cLType (chr 34)))
		)
	   )
	;Назначим текущий масштаб типа линии
	  (cond ((eq cLTypeScale nil)
			(setvar "CELTSCALE" 1)
			(princ (strcat (chr 10) "Был назначен текущий масштаб типа линий " (chr 34) "1" (chr 34)))
			)
		(t 
			(setvar "CELTSCALE" cLTypeScale)
			(princ (strcat (chr 10) "Был назначен текущий масштаб типа линий " (chr 34) (rtos cLTypeScale) (chr 34)))
		)
	   )
	;Назначим ткущий цвет чертежа
	  (cond ((eq cColor nil)
			(setvar "CECOLOR" "ByLayer")
			(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) "ПоСлою" (chr 34)))
			)
		((eq cColor 0)
			(setvar "CECOLOR" "ByBlock")
			(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) "ПоБлоку" (chr 34)))
			)
		(t 
			(setvar "CECOLOR" (rtos cColor))
			(princ (strcat (chr 10) "Был назначен текущий цвет " (chr 34) (rtos cColor) (chr 34)))
		)
	   )
	;Назначаем текущую толщину
	  (cond ((eq cThick nil)
			(setvar "THICKNESS" 0)
			(princ (strcat (chr 10) "Была назначена текущая толщина " (chr 34) "0" (chr 34)))
			)
		(t 
			(setvar "THICKNESS" cThick)
			(princ (strcat (chr 10) "Была назначена текущая толщина " (chr 34) (rtos cThick) (chr 34)))
		)
	   )
	;Назначим особые свойства для сложных объектов
	  (setq TypeObj (strcase name)) 
	  (cond 
		((eq TypeObj "ACAD_TABLE");Назначим текущий стиль таблиц
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "CTABLESTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль таблиц " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "MTEXT");Назначим текущий стиль текста
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "TEXTSTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль текста " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "MULTILEADER");Назначим текущий стиль мультивыносок
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "CMLEADERSTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль мультивыносок " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "MLINE");Назначим текущий стиль мультилинии
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(setvar "CMLSTYLE" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль мультилиний " (chr 34) StyleName (chr 34)))
		 	(setq ScaleMLine (cdr (assoc 40 dan))) ;получаем масштаб мультилинии
			(setvar "CMLSCALE" ScaleMLine)
			(princ (strcat (chr 10) "Был назначен текущий масштаб мультилиний " (chr 34) (rtos ScaleMLine) (chr 34)))
		 	(setq JustMLine (cdr (assoc 70 dan))) ;получаем выравнивание мультилинии
			(setvar "CMLJUST" JustMLine)
			(princ (strcat (chr 10) "Был назначено текущее выравнивание мультилиний " (chr 34) (rtos JustMLine) (chr 34)))
	 
		)
		((eq TypeObj "POLYLINE"));Назначим текущий стиль мультилинии
		 	(setq WidthPLine (cdr (assoc 40 dan))) ;получаем ширину полилинии
			(setvar "PLINEWID" WidthPLine)
			(princ (strcat (chr 10) "Была назначена текущая ширина полилиний " (chr 34) (rtos WidthPLine) (chr 34)))
		 	(setq SmusPLine (cdr (assoc 75 dan))) ;получаем тип сглаживания полилинии
			(setvar "SPLINETYPE" SmusPLine)
			(princ (strcat (chr 10) "Была назначена текущий тип сглаживания полилиний " (chr 34) (rtos SmusPLine) (chr 34)))
		)
		((eq TypeObj "LWPOLYLINE"));Назначим текущий стиль мультилинии
		 	(setq WidthPLine (cdr (assoc 40 dan))) ;получаем ширину полилинии
			(setvar "PLINEWID" WidthPLine)
			(princ (strcat (chr 10) "Была назначена текущая ширина полилиний " (chr 34) (rtos WidthPLine) (chr 34)))
		 	(setq GenPLine (cdr (assoc 70 dan))) ;получаем тип генерации полилинии
			(setvar "PLINEGEN" GenPLine)
			(princ (strcat (chr 10) "Была назначена текущий тип генерации полилиний " (chr 34) (rtos GenPLine) (chr 34)))
		)
		((eq TypeObj "DIMENSION");Назначим текущий стиль размеров
		 	(setq StyleName (vla-get-stylename (vlax-ename->vla-object el)))
			(command "_-dimstyle" "_r" StyleName)
			(princ (strcat (chr 10) "Был назначен текущий стиль размеров " (chr 34) StyleName (chr 34)))
		)
		((eq TypeObj "HATCH");Назначим текущий стиль штриховки
			(setq StyleName (cdr (assoc 2 dan)))
		 	(if (error (setvar "HPNAME" StyleName))
				(princ (strcat (chr 10) "Был назначен текущий стиль штриховки " (chr 34) StyleName (chr 34)))
			  	(princ (strcat (chr 10) "Штриховка " (chr 34) StyleName (chr 34) " не найдена среди штриховок АвтоКада"))
			)
		)
	  )
	  (princ (strcat (chr 10) "========================================================="))
	)
)

(defun error (msg)
;;;	(princ «error:»)
;;;	(princ msg)
	(strlen msg)
;;;	(terpri)
)
Как надо правильно это делать в отладчике AutoLisp?
Просмотров: 1783
 
Непрочитано 08.12.2022, 13:34
1 | #2
Сергей812


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


действительно, чтобы найти в пункте меню редактора "Правка" подпункт "проверка скобок" - это надо целую тему с примером кода запостить)

----- добавлено через ~2 мин. -----
Offtop: МишаИнженер, вы не блогер случайно?)
Сергей812 вне форума  
 
Непрочитано 08.12.2022, 13:40
1 | #3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,834


А также форматирование и проверку кода... Уууу, это ж огогого какая работа!
https://autolisp.ru/2009/09/10/vlide-misc-01/
https://autolisp.ru/2009/09/12/vlide-misc-02/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.12.2022, 13:40
1 | #4
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,679


120, 128
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 12.12.2022, 08:04 Помогите найти синтаксическую ошибку в коде
#5
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Помогите найти ошибку со скобками в коде:
Код:
[Выделить все]
 
  	(if (= PrScaleSht "1")
		(progn (setq MKLine MKDr)
			   (setq MKMshr (* (/ MKObjDr MKDr) kEdIsm)))
		(progn (setq MKLine MKDr)
			   (setq MKMshr (* MKObjDr kEdIsm))))
МишаИнженер вне форума  
 
Непрочитано 12.12.2022, 08:31
#6
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 465


Вообще говоря, здесь ни (progn …), ни двойной (setq … ) внутри (progn …) не нужны.

Или это просто "заготовка" для наполнения (progn … ) в дальнейшем?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 12.12.2022, 09:04
#7
name02


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


Именно в этом участке кода со скобками все нормально. Почему ты решил, что дело в скобках?
Ты в простом блокноте пишешь? Скачай хотя бы Notepad++. Этот текстовый редактор сам выделяет части кода внутри скобок - не ошибешься. Да и функции лиспа он тоже знает
name02 вне форума  
 
Автор темы   Непрочитано 12.12.2022, 09:05
#8
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Ошибка была до этих строк в функции cond
После cond была одна скобка "(", а надо было две "(("
Код:
[Выделить все]
 
	(setq EdIsm (get_tile "bEdIszm"))
	(cond ((= EdIsm "0") (setq kEdIsm 1.0));мм
		  ((= EdIsm "1") (setq kEdIsm 0.01));см
		  ((= EdIsm "2") (setq kEdIsm 0.001));м
		  ((= EdIsm "3") (setq kEdIsm 0.00001));пк
		  ((= EdIsm "4") (setq kEdIsm 0.000001)));км
В общем в Лиспе очень трудно искать ошибки в скобках

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от name02 Посмотреть сообщение
Ты в простом блокноте пишешь?
Я пишу во встроенном редакторе AutoLisp "Сервис -> AutoLisp -> Редактор Visual LISP"
МишаИнженер вне форума  
 
Непрочитано 12.12.2022, 09:26
#9
name02


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


Так в пункте меню "Правка" есть раздел "Проверка скобок". Еще есть на панели инструменты:
Нажмите на изображение для увеличения
Название: Снимок экрана 2022-12-12 092515.png
Просмотров: 39
Размер:	4.9 Кб
ID:	251936
name02 вне форума  
 
Непрочитано 12.12.2022, 10:14
1 | #10
Сергей812


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


опять ТС свои собственные темы не читает?
Сергей812 вне форума  
 
Автор темы   Непрочитано 12.12.2022, 11:52
#11
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,079


Цитата:
Сообщение от name02 Посмотреть сообщение
Скачай хотя бы Notepad++. Этот текстовый редактор сам выделяет части кода внутри скобок - не ошибешься. Да и функции лиспа он тоже знает
Notepad конечно поудобнее в деле нумерации строк чем Visual Lisp
А есть настройки в NotePADe для отображения кодов LISP?
А то не все функции Lisp узнаются NotePADом (смотрите картинку)
Миниатюры
Нажмите на изображение для увеличения
Название: Notepad для Lisp.png
Просмотров: 34
Размер:	33.7 Кб
ID:	251941  
МишаИнженер вне форума  
 
Непрочитано 12.12.2022, 12:28
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,834


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
В общем в Лиспе очень трудно искать ошибки в скобках

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от name02 Посмотреть сообщение
Ты в простом блокноте пишешь?
Я пишу во встроенном редакторе AutoLisp "Сервис -> AutoLisp -> Редактор Visual LISP"
Ни фига не трудно. Достаточно хотя бы форматирование кода применять. Ну и контроль кода, куда ж без оного.

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
опять ТС свои собственные темы не читает?
Спасибо, темы объединил.
Offtop: Пора заводить отдельную тему: "Объясняем МишеИнженеру что такое лисп и как с ним работать"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.12.2022, 18:39
1 | 1 #13
Сергей812


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


Offtop:
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Пора заводить отдельную тему: "Объясняем МишеИнженеру что такое лисп и как с ним работать"
и "флажками" туда Михаила загонять, отключив возможность создавать новые темы и писать посты в других ветках)
Сергей812 вне форума  
 
Непрочитано 12.12.2022, 19:20
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,834


Offtop: Осталось дождаться "одобрямс" от админа
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как найти лишнюю закрывающую скобку на входе?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти нагрузку от лестничного марша. Anton333S Прочее. Архитектура и строительство 3 02.03.2016 14:01
Как найти файл в Архикад15? aleksei_vp ArchiCAD 2 18.07.2015 12:15
Теплоснабжения помещений здания исправительной колонии, СП-17-02 Минюста России, помогите найти sokovv Поиск литературы, чертежей, моделей и прочих материалов 0 28.05.2015 12:51
Нужны вот такие регулируемые стойки//Где их можно найти? Laa911 Прочее. Архитектура и строительство 9 08.07.2013 16:38
Как найти сортамент европейский с двутавром 226х120 мм proteirei Металлические конструкции 2 18.02.2013 18:20