|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Где хранить табличные промежуточные результаты
Регистрация: 22.01.2010
Сообщений: 311
|
||
Просмотров: 5891
|
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Самый большой недостаток списков - "непохожесть" работы с ними на работу с обычными таблицами в понятиях "запись"-поле" !!
![]() А за много лет работы с базами данных определённые методы работы с таблицами уже въелись в мозги и они (мозги) не хотят привыкать к другим методам. Кстати, тоже склоняюсь к мысли, что в некоторых случаях внешние текстовые файлы могут оказаться удобным подспорьем. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Кто сказал про непохожесть? subst, assoc, vl-remove-if, vl-remove-if-not и т.п. - и вот оно, программерское счастие.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
При наличии времени его можно потратить бесполезно. Например, можно и на LISP написать аналоги Dataset для работы с табличными данными - навигация First, Next, Prev, GetFieldByName и т.п. Изнасиловать LISP и попытаться превратить его в Basic или что-то подобное. "Массивы" сделать. Но делать этого не стоит - LISP это язык обработки списков "от рождения". Что касается хранения промежуточных результатов, то делать это можно как угодно. И в памяти, если "промежуток" не включает выход из AutoCAD, и в файлах. Файлы могут быть любого вида. Например, можно хранить данные в "настоящей" базе данных, хотя бы Access. Но для работы с такой БД в LISP придется подключать механизмы ADO, а это довольно сложно. Можно хранить данные в текстовом файле прямо в виде LISP-списка и потом мгновенно читать их штатными функциями. Но такие данные будет затруднительно читать из программ, созданных в других средах программирования. Можно хранить и в универсальных текстовых форматах, например в XML. Вот пример: Код:
Только для LISP можно было бы эти данные хранить в текстовом файле в виде списка или, например, в CSV. Но таблицы удобно обрабатывать в "гуевых" программах, поэтому применен заведомо избыточный формат XML. Это позволяет другим программам обрабатывать таблицу как базу данных. Благодаря универсальности формата используется одна внешняя программа, обрабатывающая любые таблицы и одна LISP-функция, строящая любые таблицы. Если бы формат данных был узко-специальный, потребовалось бы много разных программ, но работающих чуть быстрее. Так что вопрос "где и как" следует решать самостоятельно в зависимости от задач - банально, но это так. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Vov.ka
Я обратил внимание на безопасные массивы, но нигде мне на глаза не попался наглядный пример работы с ними, чтобы их пощупать. ShaggyDoc Спасибо за обстоятельный ответ. Правда, меня пытались обвинить в попытке изобретения велосипеда ![]() |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
gomer
спасибо. наглядно и абсолютно понятно Тогда идём дальше: есть список точек ((N1 x1 y1 z1) (N2 x2 y2 z2)...(Nn xn yn zn)), где N - номер точки (целое число), x,y,z-координаты. Как мне получить список точек по некому условию, например все точки, у которых x=10 и 3<=z<=10 ? Или, может быть, для этой цели список должен быть вида ((N1 (x1 y1 z1)) (N2 (x2 y2 z2)) ... ) ?? |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Цитата:
![]() MyCell (nth 0 (nth 5 lstTable)) - даст ошибку, так как шестой строки тута нету ![]() swkx - храни так, как тебе ближе по смыслу. Для первого варианта можно так, например, сделать выборку (тут table - '((N1 x1 y1 z1) (N2 x2 y2 z2)...(Nn xn yn zn)): Код:
Последний раз редактировалось Евгений А., 29.05.2010 в 11:18. |
|||
![]() |
|
||||
Армспорт Регистрация: 18.07.2006
Ейск
Сообщений: 355
|
Не соласен, что зря! Вы тоже хотите ошибаться?
А если бы вы спросили - "что есть такое "список" в лиспе?", то вы уже давно получили бы подобный ответ и возможно без ошибок. __________________________________ "Вы дурак или враг?" (И.В. Сталин) Я 13 пост дописал для вас... |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Ошибаться не хочу, но повторю - gomer своим ответом меня удовлетворил
![]() Я знаю, что такое список, но не вполне освоился с методами работы с ними. Теперь про приведённый вами код: я правильно понял, выборка формируется перебором всего списка и удалением из него элементов, не удовлетворяющих условию ? Ваш код принципиально чем-нибудь отличается от структуры (foreach element table ...) ? |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Понял. Меня интересовал именно самый быстрый способ получения выборки.
Тогда еще вопрос: как мне отсортировать мой список ((N1 x1 y1 z1) (N2 x2 y2 z2)...(Nn xn yn zn)) таким образом, чтобы точки располагались в порядке возрастания координаты z ? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
swkx, тебе лучше сюда: http://forum.dwg.ru/showthread.php?t=22894
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Можно хранить в памяти во время перерывов в работе конкретной программы, но в одном сеансе работы с Автокадом. Но это уже нерациональное использование глобальных переменных, чреватое ещё и ошибками. Но данные бывают разные. Рискну утверждать, что в бОльшей части случаев, для хранения промежуточных данных, следует использовать файлы или реестр. В зависимости от характера данных и их объема. И скорость доступа, как правило, не имеет особого значения - какая разница, сработает програма за 0.01 сек или 0.0001 сек. Так что категорично утверждать не надо - всё зависит от конкретных условий задачи. |
|||
![]() |
|
||||
Регистрация: 22.01.2010
Сообщений: 311
|
Думаю, что в моём случае скорость доступа как раз может оказаться критичным параметром. Речь идет о прокладке кратчайшего маршрута по множеству 3-мерных точек, что, в свою, очередь, сводится к анализу каждой точки и её соседей. Сколько будет таких вычислений -страшно представить
![]() В принципе, я определился - буду работать со списками, если удастся перенастроить собственные мозги. Большое спасибо всем откликнувшимся за помощь. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Сильно подозреваю, что разговор идет про построение поверхности по результатам лазерного сканирования. Как бы то ни было, попробуй обратиться к Евгению Елпанову - он занимался этой проблемой. Но только учти, что человек он сейчас крайне занятой, и на быстрый ответ я бы не стал рассчитывать...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рифмоплетство. | Kryaker | Разное | 554 | 14.11.2023 11:59 |