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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите решить задачку с таблицами

Помогите решить задачку с таблицами

Ответ
Поиск в этой теме
Непрочитано 16.08.2010, 11:19 #1
Помогите решить задачку с таблицами
andery
 
Регистрация: 27.12.2007
Сообщений: 132

Есть таблица с кабелями: сечение и длина, как в примере.
Надо получить сводную таблицу сколько какого сечения кабеля есть.
Чем это можно реализовать? В каком направлении смотреть?

Заранее благодарен.

Миниатюры
Нажмите на изображение для увеличения
Название: t.jpg
Просмотров: 130
Размер:	22.3 Кб
ID:	43738  

Вложения
Тип файла: dwg
DWG 2007
kable.dwg (66.2 Кб, 513 просмотров)

Просмотров: 3847
 
Непрочитано 16.08.2010, 11:41
#2
Кулик Алексей aka kpblc
Moderator

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


Excel, сводные таблицы
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.08.2010, 11:45
#3
Do$

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


VisualLISPом можно с этим справиться. Вкратце, как-то так: прочитать значения из таблицы, составить из них список, обрабоать этот список и создать новую таблицу.
Do$ вне форума  
 
Непрочитано 16.08.2010, 11:51
#4
SergeyAB


 
Сообщений: n/a


Цитата:
Сообщение от Do$ Посмотреть сообщение
VisualLISPом можно с этим справиться. Вкратце, как-то так: прочитать значения из таблицы, составить из них список, обрабоать этот список и создать новую таблицу.
Это же просто гениально!!! А может быть есть какой то другой способ?
 
 
Непрочитано 16.08.2010, 12:18
#5
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


Цитата:
Сообщение от SergeyAB Посмотреть сообщение
Цитата:
Сообщение от Do$ Посмотреть сообщение
VisualLISPом можно с этим справиться. Вкратце, как-то так: прочитать значения из таблицы, составить из них список, обрабоать этот список и создать новую таблицу.

Это же просто гениально!!! А может быть есть какой то другой способ?
Да, есть.. К примеру, через VBA выбрать объект таблица, считать значения из ячеек в массив, обработать массив, создать новую таблицу, вставить в нее полученные значения...
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 16.08.2010, 12:30
#6
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


Еще можно objectarx использовать. Алгоритм тот-же.
Vildar вне форума  
 
Непрочитано 16.08.2010, 12:51
#7
Дима_

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


Цитата:
Сообщение от SergeyAB Посмотреть сообщение
Это же просто гениально!!! А может быть есть какой то другой способ?
Ему люди дело говорят - а он еще прикалывается:
Код:
[Выделить все]
(vl-load-com)
(defun c:test ( / data sr tbl tmp)
(setq	data (gettabledata (setq sr (car (entsel "\nИсходная таблица ")))))
(if (= (length data) 2)
	(setq 	data (mapcar '(lambda (x) (cons (car x) (rtos (cdr x))))
				 (sub-test (mapcar 'cons (car data) (cadr data))))
			tbl	  (vla-copy (vlax-ename->vla-object sr))
			tmp (vla-move tbl	(vla-get-insertionpoint tbl)
								(vlax-3d-point (getpoint "\nРезультат ")))
			tmp (vla-deletecolumns tbl (length data) (- (vla-get-columns tbl) (length data)))
			tmp 0
			data (mapcar '(lambda (x)	(vla-settext tbl 0 tmp (car x))
										(vla-settext tbl 1 tmp (cdr x))
										(setq tmp (1+ tmp)))
				data))
	"Таблица несовместимого формата"))

(defun gettabledata (tbl / lst lst1 rows col); возращает список списков по стокам таблицы
(setq row 0 col 0 tbl (vlax-ename->vla-object tbl))
(repeat (vla-get-rows tbl)
(repeat (vla-get-columns tbl)
(setq lst (append lst (list (vla-gettext tbl row col))))
(setq col (1+ col))
);end of repeat
(if lst1
(setq lst1 (append lst1 (list lst)))
(setq lst1 (list lst))
);end of if
(setq row (1+ row) col 0 lst nil)
);end of repeat
lst1);end gettabledata
	
(defun sub-test (lst / x)
(setq x (car (car lst)))
(if lst
(cons	(cons	x
				(apply '+ (mapcar 'atof (mapcar 'cdr (vl-remove-if-not '(lambda (y) (= (car y) x)) lst)))))
		(sub-test (vl-remove-if '(lambda (y) (= x (car y))) (cdr lst))))))
p.s. запускать командой test ошибки не обрабатывает
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 16.08.2010, 13:28
#8
andery


 
Регистрация: 27.12.2007
Сообщений: 132
<phrase 1=


Дима_ спасибо, работает.
Буду изучать, разбираться.
andery вне форума  
 
Непрочитано 16.08.2010, 14:24
#9
SergeyAB


 
Сообщений: n/a


Разве этот скрипт делает не то же самое?
Принципиально другое решение возможно*?
 
 
Непрочитано 17.08.2010, 21:57
#10
Lesha


 
Регистрация: 25.09.2006
город Ч на Волге
Сообщений: 20
<phrase 1=


Лучше всего сделать это в Excel.
Как уже было сказано, с помощью сводной таблицы или, например, вот так.
Вложения
Тип файла: zip Книга1.zip (1.6 Кб, 118 просмотров)
Lesha вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите решить задачку с таблицами



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите решить задачку VBA + Excel hellp123 Программирование 1 12.03.2009 08:35
Решить мелкую задачку наибыстрейше shakuredo Разное 18 29.03.2008 12:05
помогите решить задачку на ЛИСПе? Nastya_Cher LISP 2 21.03.2007 22:58