![]() |
|
|
![]()
|
|
| XaJlepa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.9.2010 Репутация: нет Всего: нет |
Здравствуйте.
Подскажите пожалуста можно ли присвоить переменной lisp информацию текстовой строки. Конкретнее меня интересует следующий вопрос: Допустим есть текстовые строки с числовыми значениями. Возможно ли сформировать список из этих строк для дальнейших арифмитических действий (сумма, разность и тп.) Если алгоритм довольно сложный, намекните какими командами можно воспользоваться для решения данной проблемы |
|||
|
||||
| VH_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Если содержимое строки - ОДНО число (например, "123.45"), то можно
(apply '+ (mapcar 'distof '("123" "123.45" "12345.67"))) возвращает 12592.1 Если содержимое строки - НЕСКОЛЬКО чисел, разделенных пробелами (например, "123 123.45 12345.67"), то можно
(apply '+ (read (strcat "(" "123 123.45 12345.67" ")"))) возвращает 12592.1 Это сообщение отредактировал(а) VH_ - 28.9.2010, 21:19 |
||||
|
|||||
| XaJlepa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.9.2010 Репутация: нет Всего: нет |
Это не совсем то что мне нужно. Под текстовой строкой я подразумевал примитив AutoCad. Суть проблемы состоит в том что бы изъять данные (само число) из неё, а не в том как просуммировать содержание.
За код спасибо. |
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
|
|||
|
||||
| XaJlepa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.9.2010 Репутация: нет Всего: нет |
Склеил всё что мне подсказали, получил:
(defun c:Sum1 () (setq Nab1 (ssget "_w" (getpoint) (getpoint))) (setq n (sslength Nab1)) (setq i 0) (repeat n ;вытаскиевает 1 элемент из набора (setq ENab (ssname Nab i)) ;применяет entget к элементу (setq SpisE (entget (car (ENab)))) ;вытаскиевает текст из элемента (setq Cifra (cdr (assoc 1 SpisE))) (setq i (1+ i)) ) ) Я так понимаю что цикл должен выдать в конце список цифр, но почему-то функция entget не срабатывает. Подскажите в чём ошибка. |
|||
|
||||
| VH_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Функция, возвращающая список содержимого (текстовых строк) объектов TEXT, набор выбора которых передается как аргумент в функцию и связывается с формальным параметром selset:
Пример вызова функции: (EXTRACT_TEXTCONTENT (ssget "_W" (getpoint '\nFirst corner: ") (getpoint '\nOpposite corner: "))) Как-то общепринято в AutoCAD, что команда НЕ возвращает значение (точнее, рекомендуется возвращать "пустую строку", для чего служит вызов функции (prin1) без аргументов). То есть лучше, чтобы команда выполняла все необходимые действия внутри себя.
Это сообщение отредактировал(а) VH_ - 8.10.2010, 10:22 |
||||
|
|||||
| XaJlepa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 19.9.2010 Репутация: нет Всего: нет |
До такого я ещё долго бы не додумался. Спасибо.
Не понятно для чего Вы разбили программу на 2 этапа... Вторая чать выдаёт ошибку с функцией lambda что-то не в порядке пишет, хз с чем связанную, но это я "обошёл". Ещё вопросик, почему тот код что я предлагал не срабатывает? |
|||
|
||||
| VH_ |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
Во «второй части» (той, что на самом деле является определением "команды" SUM1) следует заменить комментарий
на вызовы «полезных» функций (пример которой и приведен в комментарии). Если этого не сделать, интерпретатор считает пустое тело лямбда-выражения синтаксической ошибкой. В LISPе никаких «программ» и «этапов» нет. В данном случае представлены определения двух функций (EXTRACT_TEXTCONTENT) и (C:SUM1), причем в определении второй функции используется вызов первой. В Вашем определении функции C:SUM1 «не срабатывает» не вызов функции (entget), а попытка интерпретатора вычислить аргумент этого вызова:
если с символом ENab связано к моменту вызова имя примитива, что тоже вызывает сомнения, так как для этой связи используется символ Nab, а набор выбора связан с символом Nab1. |
||||
|
|||||
![]()
|
| Правила форума LISP | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | LISP | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |