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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание набора с помощью ssget из примитива *TEXT, содержащего любое количество цифр

Создание набора с помощью ssget из примитива *TEXT, содержащего любое количество цифр

Ответ
Поиск в этой теме
Непрочитано 15.02.2011, 10:16 #1
Создание набора с помощью ssget из примитива *TEXT, содержащего любое количество цифр
Nitrogenium
 
инженер
 
Санкт-Петербург
Регистрация: 02.03.2010
Сообщений: 69

Собственно, вопрос ясен из заголовка - надо создать набор из примитивов TEXT или MTEXT, содержащего такой текст:
"ПК "любое количество цифр"+"две цифры,точка,две цифры, используя ssget
Например вот такой текст:
ПК 2+50.00
ПК 45+58.45
ПК 120+84.65
Написал вот так: (ssget "_C" po1 po2 (list (cons 0 "*TEXT") (cons 8 "Layer002") (cons 1 "ПК *#+##'.##")))
Но тут используется *, которая заменяет любые символы, а мне надо любое количество цифр.
po1 и po2 - это координаты точек
Просмотров: 7807
 
Непрочитано 15.02.2011, 10:38
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Самое простое - "если любое количество цифр" в разумных пределах - то использовать "<OR "OR>" c перебором решеток (скажем от # до #####) - ну или фильтровать постфактум.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.02.2011, 10:42
#3
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


фильтровать постфактум? Это как?
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 10:53
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Пишешь функциию на входе набор, условия отбора; на выходе отфильтрованный набор (я бы наборам предпочел списки - но можно и с наборами - если требуется).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.02.2011, 11:11
#5
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


Что-то я не очень понял
(ssget "_C" po1 po2 (list (cons 0 "*TEXT") (cons 8 "Layer002") (cons -4 "<OR") (cons 1 "ПК #+##'.##") (cons 1 "ПК ##+##'.##") (cons 1 "ПК #+##'.##") (cons 1 "ПК ###+##'.##") (cons 1 "ПК ####+##'.##") (cons 1 "ПК #####+##'.##") (cons -4 "OR>"))) А вот это может прокатит?
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 11:30
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


А почему нет - это собственно 1 вариант из #2.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.02.2011, 11:36
#7
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


да вроде все верно, но не особо работает даже просто это:
(list (cons 0 "*TEXT") (cons 8 "Layer002") (cons 1 "ПК #+##'.##"))
cons-ов больше 2-х можно ставить?
Может надо AND использовать?
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 11:38
#8
Лиспер


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


А зачем так жестко-то?
Код:
[Выделить все]
(ssget '((0 . "*TEXT") (8 . "Layer002") (1 . "ПК #+##'.##,ПК ##+##'.##,ПК ###+##'.##,ПК ####+##'.##,ПК #####+##'.##")))
Так не проще? Offtop: А если гарантируется, что после ПК абсолютно точно идет пробел и сколько-то цифр, то тогда еще проще получится
Код:
[Выделить все]
(ssget '((0 . "*TEXT") (8 . "Layer002") (1 . "ПК *+##'.##")))
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 15.02.2011, 11:49
#9
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


А через cons нельзя разве?
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 11:52
#10
Лиспер


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


Можно. Но каков смысл, если критерии заранее известны?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 15.02.2011, 12:49
#11
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


(ssget "_C" po1 po2 (list (cons -4 "<OR") (cons 0 "*TEXT") (cons 8 "Layer002") (cons 1 "ПК #+##'.##") (cons -4 "OR>")))
Вот это создает набор, но создает неверно, то есть ПК е3+45.15 скажем в набор войдет =(((((!
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 13:02
#12
VVA

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


ПК е3+45.15 -> (cons 1 "ПК ?#+##'.##")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 15.02.2011, 13:08
#13
Лиспер


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


А почему в #11 используется OR?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 15.02.2011, 13:13
#14
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


Уж все что можно перебрал - ничего не подходит: набор не создается
...либо фильтр не работает
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 13:15
#15
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Цитата:
Уж все что можно перебрал - ничего не подходит: набор не создается
...либо фильтр не работает
Выкладывай чертеж где не создается
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 15.02.2011, 13:19
#16
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Nitrogenium Посмотреть сообщение
(ssget "_C" po1 po2 (list (cons -4 "<OR") (cons 0 "*TEXT") (cons 8 "Layer002") (cons 1 "ПК #+##'.##") (cons -4 "OR>")))
на русский язык это выражение можно перевести так:
создать набор объектов, попавших в секущую рамку, определяемую точками po1 и po2, при этом объект набора должен быть или текстом или на слое "Layer002" или в его dxf-коде 1 должна содержаться строка, отвечающая шаблону "ПК #+##'.##"
Do$ вне форума  
 
Автор темы   Непрочитано 15.02.2011, 13:23
#17
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


Вот файл - особенного ничего не представляет - создан в целях отладки
Цитата:
на русский язык это выражение можно перевести так:
создать набор объектов, попавших в секущую рамку, определяемую точками po1 и po2, при этом объект набора должен быть или текстом или на слое "Layer002" или в его dxf-коде 1 должна содержаться строка, отвечающая шаблону "ПК #+##'.##"
Да, при попытке прописать AND отказывается создавать набор
Выяснилось, что апостраф '. работать не хочет, а просто . работает
Все - разобрался: должен использоваться `, а не '
Вложения
Тип файла: dwg
DWG 2007
Образец 0.dwg (83.3 Кб, 688 просмотров)

Последний раз редактировалось Nitrogenium, 15.02.2011 в 14:07.
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 14:16
#18
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 571


Ну вот на вашем чертеже так все работает
Код:
[Выделить все]
 
(setq nbr (ssget "_X" (list (cons 0 "*TEXT") (cons -4 "<OR") (cons 1 "ПК #+##`.##") (cons 1 "ПК ##+##`.##") (cons 1 "ПК ###+##`.##") (cons 1 "ПК ####+##`.##") (cons 1 "ПК #####+##`.##") (cons -4 "OR>"))))
По-моему Вы в предыдущих примерах использовали символ " ' " (апостроф), в конструкции (cons 1 "ПК #+##'.##"), а нужно " ` " (обратный апостроф) поэтому и не работало

P.S не успел автор сам разобрался
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 15.02.2011, 15:48
#19
Nitrogenium

инженер
 
Регистрация: 02.03.2010
Санкт-Петербург
Сообщений: 69
<phrase 1=


Всем спасибо!
Правда хотелось бы уточнить - реально ли написать, чтобы количество цифр перед плюсом было вообще любым
Nitrogenium вне форума  
 
Непрочитано 15.02.2011, 17:02
#20
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Nitrogenium Посмотреть сообщение
реально ли написать, чтобы количество цифр перед плюсом было вообще любым
ИХМО только вторым метод в #2.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание набора с помощью ssget из примитива *TEXT, содержащего любое количество цифр

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание набора с помощью activeX Composter Программирование 3 15.05.2009 00:11