Реклама i
|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как преобразовать список в строку
Регистрация: 08.12.2005
Сообщений: 17
|
||
Просмотров: 7519
|
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627
|
Привет!
А печатать список поэлементно в файл не пробовал? Что-то вроде того: (foreach p твой_список (princ p f)(princ " " f) ) f - дескриптор открытого на запись файла, "пробел" - разделитель элементов списка.
__________________
Счастливо, Алексей! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
ну вот универсальная функция преобразования почти чего угодно в строку
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,291
|
Вот вариант попроще:
Код:
l1 - список, каждый элемент которого - строка div1 - символ-разделитель Если div1="" - то результирующий список соберется в строку без пробелов. Если div1=" " или div1=nil (по-умолчанию) - то через пробелы. Если div1="-" - то через дефис. Если div1="abcd" - то через "abcd". Ну и т.д. Сама функция возвращает строку. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,431
|
> Александр Ривилис : Ну просто эта функция у меня практически библиотечная - вместо того чтобы вызывать itoa rtos и прочая, я использую всего одну. А так пошел ну от незнания, наверное. Я ж все-таки не профи Вашего уровня
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 08.12.2005
Сообщений: 17
![]() |
Короче тема такая. Я получаю характеристики примитива при помощи функции entget (возвращается примерно такая штука):
((-1 . <Entity name: 7ef62a18>) (0 . "CIRCLE") (330 . <Entity name: 7ef5ccf8>) (5 . "3313") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "стена") (100 . "AcDbCircle") (10 67548.3 44861.5 0.0) (40 . 350.0) (210 0.0 0.0 1.0)) ((-1 . <Entity name: 7ef62a18>) (0 . "CIRCLE") (330 . <Entity name: 7ef5ccf8>) (5 . "3313") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "ñòåíà") (100 . "AcDbCircle") (10 67548.3 44861.5 0.0) (40 . 350.0) (210 0.0 0.0 1.0)) Длаее я выбираю допустим название объекта функцией assoc (setq obj (assoc 0 entobj)) Затем мне нужно преобразовать в строку и записать файл ну пусть будет так (setq e (vl-princ-to-string obj)) Все нормально. Записали в файл а когда хочу создать набор с помощью функции ssget и прописываю фильтр которая нахоится в переменной e то вылезает ошибка т.к. это не список Пробую так (setq o (list e)) весь код: (defun c:con() (setq lst1 nil) (setq res "") (setq obj (nth 0 (entsel "Выбор объекта: "))) //выбираем объект и получаем его имя (setq entobj (entget obj)) //получаем список характеристик объекта (setq lst1 (vl-princ-to-string (assoc 0 entobj)) //записываем список в переменную lst1 как текст ;;сдесь я будем считать записал занчение переменной lst1 в файл ;;в нужный момент я в переменную lst1 записал значение из файла (setq lst1 (list lst1)) (ssget "_X" lst1) //сдесь возникает ошибка (print) ) Подскажите в чем дело? |
|||
![]() |
|
||||
Регистрация: 26.12.2013
Сообщений: 283
|
Почти такая же проблема была- решил.
Подскажите: Надо автоматический перебор полилиний в нужном слое (сообщения заменю на нужные функции потом - будут конечные и начальные точки и поиск отдельных линий которые соединены- уверен есть метод проще, но пока как-то так). И такой вопрос: 1) (vlax-ename->vla-object pl) обратно преобразовывать надо?- у меня выдает ошибку почему-то 2) обнулил переменные правильно?- у меня сомнения почему-то. Код:
Последний раз редактировалось tujn08, 18.03.2015 в 10:24. |
|||
![]() |