Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
whatcholingon

[ Yêu Cầu ] LISP xuất các text trong vùng kín

Các bài được khuyến nghị

Mong mọi người viết giùm mình lisp như sau: ( mình đang cần gấp, mọi người bỏ chút thời gian giúp mình với)

    -trong bản vẽ của mình có các thửa đất, trong các thửa đất này có các layer:

       số thửa

       diện tích

       loại đất

       tên chủ hộ

       địa chỉ

(các text này đều nằm trong vùng kín của từng ô)

Giờ mình muốn xuất các text này ra file csv nếu qua excel được thì càng tốt.

cứ mỗi 1 thửa đất thì xuất ra một dòng như sau:

file csv:
1,83.5,ONT, Nguyễn Thị Liên, thôn a, xã b. tỉnh c

2...

3...

4...

...

(mỗi một thửa là một dòng)

đây là file của mình;

http://www.cadviet.com/upfiles/3/96857_drawing1.dwg

Thanks all!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Rất cám ơn bạn. mình có xem chủ trên và có dow 1lisp về chạy thử thì báo lỗi sau:

Command: ; error: malformed list on input

bạn kiểm tra giùm mình xem là lỗi gì ah?

đây là lsp :

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/topic/3107-chuyen-so-lieu-text-tu-cad-sang-excell/
(defun c:CTE(/ ss ent sht dtich cthua gchu i L lst fname);copyright by Tue_NV(defun checkss (sset)    (if (null sset) 	(acet-list-to-ss (list (entmakex (list (cons 0 "TEXT") (cons 1 "") (cons 10 (list 0 0 0)) (cons 40 2) ) ) ))    ))(IF (ACET-UTIL-VER)(PROGN(iF (setq ss (ssget '((0 . "*POLYLINE") (70 . 1))))(pROGN (setq i -1 lst '())  (while (setq ent (ssname ss (setq i (1+ i))))    (setq L (acet-geom-vertex-list ent))    (if (null (setq sht (ssget "CP" L '((0 . "*TEXT") (8 . "Sothua") (1 . "~*[~0-9]*")))) ) 	(setq sht (checkss sht)) )    (if (null (setq dtich (ssget "CP" L '((0 . "*TEXT") (8 . "Dientich") (1 . "*#.#*,*#,#*")))) )	(setq dtich (checkss dtich)) )    (if (null (setq cthua (ssget "CP" L '((0 . "*TEXT") (8 . "Text") (1 . "*@*")))) ) 	(setq cthua (checkss cthua)) )    (if (null (setq gchu (ssget "CP" L '((0 . "*TEXT") (8 . "Dientich") (1 . "@@@")))) )	(setq gchu (checkss gchu)) )       (setq lst (vl-sort 	           (append lst    		     (list		 	 (mapcar '(lambda(x) 			   		(acet-dxf 1 (entget x))				   )	    			(apply 'append			       		(mapcar 'acet-ss-to-list				       			(list sht sht cthua dtich gchu)			       		)				)    		   	)		     )	          );append		 '(lambda (x1 x2) (< (atoi (car x1)) (atoi (car x2))))		);vl-sort    	)  );while  ;;;;;;;;;;;;;;(if (setq fName (getfiled "Ten file xuat " (getvar "dwgprefix") "xls" 1))   (progn	(setq fName (open fName "w"))	(write-line "STT\tSO HIEU THUA\tCHU THUA\tDIEN TICH\tGHI CHU" fname)	(foreach pt lst	   (write-line (strcat (nth 0 pt) "\t" (nth 1 pt) "\t" (nth 2 pt) "\t"			       (nth 3 pt) "\t" (nth 4 pt)) fName)	)       (close fName)   ))  ))));PROGN_IF(setvar "modemacro" "Chuc ban lam viec hieu qua - tue_nvcc@yahoo.com") (princ))

Thanks!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như là cái này:

 

;; free lisp from cadviet.com ;copyright by Tue_NV; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=3107
(defun C:CTE(/ ss ent sht dtich cthua gchu lst i fname)
 (if (acet-util-ver)
  (progn
   (if (setq ss (ssget '((0 . "*POLYLINE") (70 . 1))))
   (progn 
    (setq i -1 lst '())
    (while (setq ent (ssname ss (setq i (1+ i))))
     (setq L (acet-geom-vertex-list ent))
     (if
      (and
       (setq sht (ssget "CP" L '((0 . "*TEXT") (8 . "Sothua") (1 . "~*[~0-9]*"))))   ;text lµ sè nguyªn
       (setq dtich (ssget "CP" L '((0 . "*TEXT") (8 . "Dientich") (1 . "*#.#*,*#,#*")))) ;text lµ sè thùc
       (setq cthua (ssget "CP" L '((0 . "*TEXT") (8 . "Chu SD") (1 . "*@*")))) ;text că chøa kư tù trèng ë ®Çu/gi÷a/cuèi
       (setq gchu (ssget "CP" L '((0 . "*TEXT") (8 . "Dientich") (1 . "@@@"))))) ;text chøa ®óng 3 kư tù ???
      (setq lst (vl-sort (append lst (list (mapcar '(lambda (x) (acet-dxf 1 (entget x)))
                       (apply 'append (mapcar 'acet-ss-to-list (list sht sht cthua dtich gchu))))))
'(lambda (x1 x2) (< (atoi (car x1)) (atoi (car x2))))))))
    (if (setq fName (getfiled "Ten file xuat " (getvar "dwgprefix") "xls" 1))
     (progn
      (setq fName (open fName "w"))
      (write-line "STT\tSO HIEU THUA\tCHU THUA\tDIEN TICH\tGHI CHU" fname)
      (foreach pt lst
       (write-line (strcat (nth 0 pt) "\t" (nth 1 pt) "\t" (nth 2 pt) "\t" (nth 3 pt) "\t" (nth 4 pt)) fName))
       (close fName)))))));PROGN_IF
 (setvar "modemacro" "Chuc ban lam viec hieu qua - tue_nvcc@yahoo.com")
 (princ))
 
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cám ơn bạn rất nhiều.

Lisp chạy được nhưng lại không lấy text trong vùng kín được bạn ạ.

lisp chỉ lấy được text trong vùng kín là đường pline bao quanh thửa thôi, chứ vùng kín là line thì không lấy được.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

trong bản vẽ của mình thì vùng kìn đều là Line cả,

bạn xem file của mình rồi viết theo bản vẽ của mình với

Thanhks!

 

Nếu là Line thì chỉ còn cách bạn sử dụng lệnh Boundary để tạo thành Polyline kín mới được. 

Và tất nhiên sẽ chỉnh sửa Lisp cho phù hợp với y/c của bạn

Để lúc rảnh mình mần Lisp này cho tổng quát, để trong trường hợp Pline kín thế nào chăng nữa cũng sử dụng được. 

Giờ cũng hơi bận ^_^

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Cám ơn bạn,trong bản vẽ có cả trăm thửa lớn và nhỏ , ngồi bo từng thửa thì mất nhiều thời gian quá.

hy vọng sẽ nhận được lisp của bạn sớm.

Thanks!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay
Đăng nhập để thực hiện theo  

×