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

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

Подскажите пожалуйста почему не работает этот лисп-код выборки строк из таблиц?

Ответ
Поиск в этой теме
Непрочитано 02.09.2009, 17:14 #1
Подскажите пожалуйста почему не работает этот лисп-код выборки строк из таблиц?
lexluther
 
Регистрация: 19.03.2009
Сообщений: 51

Добрый день,

Я написал следующий код для выборки всех текстовых строк в таблицах на всех слоях автокадовского рисунка. Но он не работает т.е выбирает не все строки а только часть из них, вместо остальных выдается пустую строку. Почему?

Сам код вот:

Код:
[Выделить все]
(defun collect-data-from-tables    (/  lm-object exp-str-exist)

  (defun process-each-table-yentry (object x y lm-object)
    (if (/= y 0)
      (progn

    (write-line (vla-GetText object x y))
    
    (setq y (- y 1))
    (process-each-table-yentry object x y lm-object)
    )
      )
  )

  (defun process-each-table-xentry (object x y lm-object)
    (if    (/= x 0)
      (progn
    (setq x (- x 1))
    (process-each-table-yentry object x y lm-object)
    (process-each-table-xentry object x y lm-object)
    )
    )
  )
    
  (defun pickset-to-list (value / acad-tab item)
    (repeat
      (setq acad-tab nil
        item     (progn
               (cond
             (value (sslength value))
             (t 0)
               )
             )
      )
       (setq acad-tab
          (cons
        (ssname    value
            (setq item (1- item))
        )
        acad-tab
          )
       )
    )
  )

  (vl-load-com)
  
  (foreach item    (pickset-to-list (ssget "_X"))
    (setq object (vlax-ename->vla-object item))
    (if    (= (vla-get-ObjectName object) "AcDbTable")
      (progn
    (setq x (vla-get-columns object))
    (setq y (vla-get-rows object))

    (process-each-table-xentry object x y lm-object)
      )
    )
  )
)
Сам файл с таблицей во вложении.

Сама таблица вроде распарсивается нормально, но на выход выдается какой то бред в моем случае вот что:





7
6



4
3

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

Просмотров: 1963
 
Непрочитано 02.09.2009, 21:43
#2
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Интресно, а в какой переменной у тебя накапливатся текст из таблицы?
Как вариант:
Код:
[Выделить все]
(if (setq sset (ssget "_X" '((0 . "ACAD_TABLE"))))
  (mapcar '(lambda (object / x y i txt lst)
             (setq object (vlax-ename->vla-object object)
                   x      (vla-get-columns object)
                   y      (vla-get-rows object)
             ) ;_ end of setq
             (repeat y
               (setq y (1- y)
                     i x
               ) ;_ end of setq
               (repeat x
                 (setq i (1- i))
                 (if (/= (setq txt (vla-GetText object y i)) "")
                   (setq lst (cons txt lst))
                 ) ;_ end of if
               ) ;_ end of repeat
             ) ;_ end of repeat
           ) ;_ end of lambda
          (vl-remove-if
            (function listp)
            (mapcar (function cadr)
                    (ssnamex sset)
            ) ;_ end of mapcar
          ) ;_ end of vl-remove-if
  ) ;_ end of mapcar
) ;_ end of if
CB вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подскажите пожалуйста почему не работает этот лисп-код выборки строк из таблиц?