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

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

Копирование текста из одного столбца таблицы в другую таблицу до первой точки или запятой

Ответ
Поиск в этой теме
Непрочитано 13.03.2012, 13:58 #1
Копирование текста из одного столбца таблицы в другую таблицу до первой точки или запятой
antiponf
 
Регистрация: 11.01.2012
Сообщений: 38

Нужен Лисп для копирование из одного столбца таблицы в другую таблицу текста до первой точки или запятой. Имеется 2 таблицы, нажимаем кнопку, выбираем столбец таблицы, выбираем столбец другой таблицы, жмем enter и все данные копируются из одного столбца в другой, причем текст каждой ячейки копируется до первой точки или запятой.
Заранее благодарен.
Просмотров: 4489
 
Непрочитано 13.03.2012, 14:11
#2
Дима_

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


Offtop: Иш захотел...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2012, 14:20
#3
antiponf


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


я просто ничего не понимаю в лиспе. Скажите это не возможно?
antiponf вне форума  
 
Непрочитано 13.03.2012, 14:39
#4
Дима_

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


Возможно, просто если выбирать столбец запросом цифры (его номера), то это на 3 минуты кодить - но работать не удобно, а если выбирать мышкой - то надо использовать "заднепроходные" методы определения, что ты выбрал (с учетом всевозможных конфигураций столбцов) - т.к. API для выбора столбца (ячеек) таблицы ни в лиспе, ни в объектной модели нет.
p/s/ что то меня никто не поправил, на выбранный (штатно) столбец-то нет, а про HitTest я что-то упустил, ну да бог с ним.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 19.03.2012 в 17:21.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2012, 14:47
#5
antiponf


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


Можно и цифрой. мне не часто это делать нужно, но каждый раз длинные таблицы копировать это проблема
antiponf вне форума  
 
Непрочитано 13.03.2012, 15:15
#6
Дима_

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


Код:
[Выделить все]
 (vl-load-com)
(defun c:table-text-copy()
  ((lambda (strim-list)
     ((lambda (t1 c1 t2 c2)
        ((lambda (rowcount)
           ((lambda (frec doc)
              (vla-startundomark doc)
              (frec 1)
              (vla-endundomark doc))
            (lambda (row)
              (if (> rowcount row)
                  (progn (vla-settext t2 row c2 (vl-list->string 
                                                 (strim-list
                                                  (vl-string->list(vla-gettext t1 row c1)))))
                         (frec (1+ row)))))
            (vla-get-activedocument(vlax-get-acad-object))))
         (min (vla-get-rows t1) (vla-get-rows t2))))
      (vlax-ename->vla-object (car (entsel "\n Исходная таблица ")))
      (getint "\n Номер столбца ")
      (vlax-ename->vla-object (car (entsel "\n Целевая таблица ")))
      (getint "\n Номер столбца ")))
   (lambda (lst)
     (if lst
         (if (not (or (= (car lst) 46) (= (car lst) 44)))
             (cons (car lst) (strim-list (cdr lst))))))))
Ошибок не проверяет, запускать командой table-text-copy, столбцы считает по программистки - начиная с нуля, первую строку (заголовок) не копирует.
p.s. Чуток исправил.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 13.03.2012 в 16:01.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2012, 15:27
#7
antiponf


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


спасибо огромное, а вот еще вопрос простите что не в тему, можно сделать лисп чтобы выделенный текст обводился прямоугольником, а над правым углом прямоугольника появлялся мтекст А1
antiponf вне форума  
 
Непрочитано 13.03.2012, 15:29
#8
Дима_

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


Offtop: и тут остапа понесло да все можно, лишь бы... текст или тексты?? пример короче нарисуй.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2012, 15:40
#9
antiponf


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


Кстати, предыдущая программа копирует в другой столбик, но не обрезает текст по первой запятой или точке :-(
Миниатюры
Нажмите на изображение для увеличения
Название: рамка.PNG
Просмотров: 59
Размер:	20.3 Кб
ID:	76345  
antiponf вне форума  
 
Непрочитано 13.03.2012, 16:00
#10
Дима_

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


Это я со слепу бегло прочитал и решил что обрезать надо по точке с запятой ; - исправил в #6.
Код:
[Выделить все]
 (vl-load-com)
(defun pln (lst c); создает полилинию по списку вершин lst, c - nil/T - разомкн/замкнт или '(с слой цвет).
  (entmakex (append
             (list (cons 0 "LWPOLYLINE")(cons 100 "AcDbEntity")(cons 100 "AcDbPolyline") (cons 90 (length lst)))
             (if (= (type c) 'list)
                 (vl-remove nil (list
                                 (if (car c) (cons 70 1) (cons 70 0))
                                 (if (cadr c) (cons 8 (cadr c)))
                                 (if (caddr c) (cons 62 (caddr c)))
                                 ));end of list & vl-remove
                 (list (if c (cons 70 1) (cons 70 0)))
                 );end of if
             (mapcar '(lambda (x) (cons 10 x)) lst)
             ));end of apend & entmakex
  );end of pln
(defun c:ramka-a1()
  ((lambda (doc lst)
     (vla-startundomark doc)
     (mapcar '(lambda (txt / maxpt minpt)
                (vla-getboundingbox (vlax-ename->vla-object txt) 'maxpt 'minpt)
                ((lambda (pt1 pt2)
                   (pln (list pt1 (cons (car pt1) (cdr pt2)) pt2 (cons (car pt2) (cdr pt1))) T)
                   (entmakex (list '( 0 . "TEXT") (cons 10 (cons (- (car pt2) 4) (cdr pt2))) '(40 . 2.5) '(1 . "A1"))))
                 (vlax-safearray->list maxpt)
                 (vlax-safearray->list minpt)))
             lst)
     (vla-endundomark doc))
   (vla-get-activedocument(vlax-get-acad-object))
   (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "*text"))))))))
Команда ramka-a1 для "настройки" размера шрифта и отступа - строка 23 (цифры 4 и 2.5) - задай сам - вычислять их програмно мне просто лень.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 13.03.2012 в 17:02.
Дима_ вне форума  
 
Автор темы   Непрочитано 13.03.2012, 16:54
#11
antiponf


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


выбираю текст жму enter и пишет
Error: no function definition: PLN
:-(
antiponf вне форума  
 
Непрочитано 13.03.2012, 17:00
#12
Дима_

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


Забыл я про нее - исправил в #10.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Копирование текста из одного столбца таблицы в другую таблицу до первой точки или запятой

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Почему при вставке новой строки в таблицу в кторой есть ссылки на другую таблицу эти ссылки начинают ссылаться на другие ячейки? МишаИнженер AutoCAD 8 09.11.2010 20:24
как с помощью vba начертить линию vasyavip Программирование 77 09.10.2008 23:17