Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Viết lisp xử lý số liệu từ .txt vào trong cad


  • Please log in to reply
31 replies to this topic

#21 Trà Đá

Trà Đá

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 08 June 2012 - 02:43 PM

Hề hề hề,
Thông như thông điếu rồi đây:



(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (< i (strlen S))
(setq i (1+ i) ch (substr S i 1))
(if (= ch sym) (progn
(setq
L (append L (list (substr S 1 (- i 1))))
S (substr S (1+ i) (- (strlen S) i))
i 0
)
))
)
(append L (list S))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:nht (/ k1 k2 k3 k4 kcl kc fn f str ans txl p i oldos)
(setq oldos (getvar "osmode" ))
(setvar "osmode" 0)
(command "undo" "be")
(setq k1 (getreal "\n Nhap khoang cach thu nhat: ")
k2 (getreal "\n Nhap khoang cach thu hai: ")
k3 (getreal "\n Nhap khoang cach thu ba: ")
k4 (getreal "\n Nhap khoang cach thu tu: ")
kcl (list 0 k1 k2 k3 k4)
)

(setq fn (getfiled "Select Data File" "" "txt" 0)
f (open fn "r")
)
(while (and (/= (setq str (read-line f)) nil) (= (strcase (setq ans (getstring "\n Ban muon tiep tuc <y or n>: "))) "Y"))
(setq txl (separate str "\t")
p (getpoint "\n Chon diem bat dau nhap text ")
i 0
kc 0 )
(foreach s txl
(setq kc (+ kc (nth i kcl)))
(command "text" (list (+ (car p) kc) (cadr p) ) 2 90 s)
(setq i (1+ i))
)
)
(close f)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
Chúc bạn vui.


Em thử lisp của bác được mỗi một dòng là báo lỗi "​; error: Function cancelled"
Lisp của bác viết cho 5H , nếu em có 6H thì lỗi ngay . làm sao có thể linh động như của bác Ket xu được thì tốt ạ
  • 0

#22 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 08 June 2012 - 02:44 PM


Em cảm ơn bác Ketxu. Lisp của bác gặp 3 vấn đề như sau :
1.Em chót nhập sai 1 khoảng cách dẫn tới sai toàn bộ những cái về sau.Lại phải nhập lại từ đầu.
2. Có thể làm cách nào để hiện giá trị H1 của dòng tiếp theo được không ạ? Cứ mãi là vòng lặp " chọn điểm đặt dòng 1" thì em không biết là tới đâu rồi ạ.
3. Em muốn nhớ giá trị khoảng cách của lần nhập trước có được không ạ
Mong bác giúp đỡ ạ

1. Làm theo yêu cầu của bạn thôi.
2. Dòng này mình đặt j 0 nhầm chỗ, bạn cho lên phía cùng hàng với (open fn "r") là được
3. Có, nhưng bạn không yêu cầu
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#23 Trà Đá

Trà Đá

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 08 June 2012 - 02:51 PM

1. Làm theo yêu cầu của bạn thôi.
2. Dòng này mình đặt j 0 nhầm chỗ, bạn cho lên phía cùng hàng với (open fn "r") là được
3. Có, nhưng bạn không yêu cầu


Em xử lý được vấn đề thứ 2 rồi . Anh giúp em xử lý vấn đề thứ 3 được không ạ?
  • 0

#24 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 08 June 2012 - 02:53 PM


Em thử lisp của bác được mỗi một dòng là báo lỗi "​; error: Function cancelled"
Lisp của bác viết cho 5H , nếu em có 6H thì lỗi ngay . làm sao có thể linh động như của bác Ket xu được thì tốt ạ

Hề hề hề,
Muốn 6 thì có 6 ngay, nhưng vấn đề là bạn cần tối đa bao nhiêu cột để làm một thể. Mười cột nhé. Bổ sung vào lisp cũ.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#25 Trà Đá

Trà Đá

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 08 June 2012 - 03:00 PM

Hề hề hề,
Muốn 6 thì có 6 ngay, nhưng vấn đề là bạn cần tối đa bao nhiêu cột để làm một thể. Mười cột nhé. Bổ sung vào lisp cũ.


Tối đa 10 cột cũng được ạ.
  • 0

#26 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 08 June 2012 - 03:41 PM

Sau khi pick điểm đặt dòng, nếu đánh sai khoảng cách thì Undo lại


(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj (vla-addmtext blk (vlax-3d-point p) h str)) 4)
(vla-put-rotation obj (* pi 0.5))
)
(defun mLstPnt (p lstDisX lstVal)
(mapcar '(lambda(y z)(mtext y z blk *tH*))
lstVal
(cons p (mapcar '(lambda(x)(setq p (cons (+ (car p) x) (cdr p)))) lstDisX))
)
)

(setq fn (open fn "r") j 0)
(or tmpDis (setq tmpDis 1))
(while (setq rl (read-line fn))
(setq i 1 )
(setq p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :"))
lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")"))))
(while (< i (1+ (length lstVal)))
(initget "u")
(setq tmpDis (cond ((getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) " <" (vl-princ-to-string tmpDis) ">:")))(tmpDis)))
(cond
((or (= tmpDis "u")(= tmpdis "U"))(setq i (- i 2)))
(T (setq lstDisX (cons tmpDis lstDisX)))
)
)
(mLstPnt p (reverse lstDisX) lstVal)
(setq lstDis '())
)
(close fn)
)
)
)

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#27 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 08 June 2012 - 03:59 PM


Tối đa 10 cột cũng được ạ.

Hề hề hề,
Đã update tại bài post trước . bạn Down lại và check nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#28 vantuan18nd

vantuan18nd

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 08 June 2012 - 05:52 PM

Các bác chỉnh sửa giúp em theo cách này với
- mình chỉ cần nhập khoảng cách giữa H1-H2, H2-H3,....
- sau đó tự động phun các cột đó vào CAD ( bỏ qua bước nhập điểm đặt dòng text thứ 1, 2...)

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=64582&pid=202432&st=20&#entry202432

(defun c:itext(/ blk *tH* lstDis lstDisX lstVal fn mLstPnt rl i j p mtext)(vl-load-com)
(setq blk (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object)))))
(setq *tH* 1)
(cond
((setq fn (getfiled "Chon file so lieu" "" "txt" 8))
(defun mtext (str p blk h / obj)
(vla-put-AttachmentPoint (setq obj (vla-addmtext blk (vlax-3d-point p) h str)) 4)
(vla-put-rotation obj (* pi 0.5))
)
(defun mLstPnt (p lstDisX lstVal)
(mapcar '(lambda(y z)(mtext y z blk *tH*))
lstVal
(cons p (mapcar '(lambda(x)(setq p (cons (+ (car p) x) (cdr p)))) lstDisX))
)
)

(setq fn (open fn "r") j 0)
(or tmpDis (setq tmpDis 1))
(while (setq rl (read-line fn))
(setq i 1 )
(setq p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :"))
lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")"))))
(while (< i (1+ (length lstVal)))
(initget "u")
(setq tmpDis (cond ((getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) " <" (vl-princ-to-string tmpDis) ">:")))(tmpDis)))
(cond
((or (= tmpDis "u")(= tmpdis "U"))(setq i (- i 2)))
(T (setq lstDisX (cons tmpDis lstDisX)))
)
)
(mLstPnt p (reverse lstDisX) lstVal)
(setq lstDis '())
)
(close fn)
)
)
)


  • 0

#29 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 09 June 2012 - 10:37 AM

Các bác chỉnh sửa giúp em theo cách này với
- mình chỉ cần nhập khoảng cách giữa H1-H2, H2-H3,....
- sau đó tự động phun các cột đó vào CAD ( bỏ qua bước nhập điểm đặt dòng text thứ 1, 2...)

Hề hề hề,
Bỏ qua bước chọn điểm đặt của dòng text thì bạn định phun nó vào đâu??? Vào cái chỗ tè le nào đó cũng được ư??? Và như vậy thì các dòng text này cần cách nhau bao nhiêu????
Hề hề hề, mong bạn nói rõ để nó khỏi tè le bạn nhé....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#30 vantuan18nd

vantuan18nd

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 09 June 2012 - 03:38 PM

Hề hề hề,
Bỏ qua bước chọn điểm đặt của dòng text thì bạn định phun nó vào đâu??? Vào cái chỗ tè le nào đó cũng được ư??? Và như vậy thì các dòng text này cần cách nhau bao nhiêu????
Hề hề hề, mong bạn nói rõ để nó khỏi tè le bạn nhé....

Hè . ý em thế này
Em muốn load cả file ấy vào một điểm đặt bất kỳ.( Như lisp trên thì mình pick chọn điểm chèn thứ nhất, thứ 2, thứ 3...... thứ n. không phù hợp với cái em cần)
em cần sau khi chạy lệnh của lisp thì nó hỏi chọn điểm đặt và kết quả là hiển thị hết luôn hàng và cột.
Đặt vào chỗ tè le nào là do mình chọn, em cũng không quan tâm tới khoảng cách H1-H2, H2-H3.....Hn-1 - Hn.
( ví dụ : có 3 cột và 10 hàng thì sau khi chạy lisp nó hỏi đặt điểm chèn, kết quả hiển thị luôn 3 hàng và 10 cột )
em chẳng biết diễn đạt sao nữa. hì
  • 0

#31 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 June 2012 - 10:02 AM

Hè . ý em thế này
Em muốn load cả file ấy vào một điểm đặt bất kỳ.( Như lisp trên thì mình pick chọn điểm chèn thứ nhất, thứ 2, thứ 3...... thứ n. không phù hợp với cái em cần)
em cần sau khi chạy lệnh của lisp thì nó hỏi chọn điểm đặt và kết quả là hiển thị hết luôn hàng và cột.
Đặt vào chỗ tè le nào là do mình chọn, em cũng không quan tâm tới khoảng cách H1-H2, H2-H3.....Hn-1 - Hn.
( ví dụ : có 3 cột và 10 hàng thì sau khi chạy lisp nó hỏi đặt điểm chèn, kết quả hiển thị luôn 3 hàng và 10 cột )
em chẳng biết diễn đạt sao nữa. hì

Hề hề hề,
Vậy sao bạn không xài copy clipboard trong xls rồi paste sang CAD một phát là xong???? Lisp liếc làm chi cho nó thêm phần ..... bác học vậy???
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#32 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 11 June 2012 - 11:09 AM

Thực sự như bạn yêu cầu thì không ai giúp được đâu. Nếu như bạn nói đặt 1 phát ăn luôn thì cái bản vẽ của bạn phải có tổ chức đàng hoàng. Như kiếu: khoảng cách các hàng là bao nhiêu? KC các cột là bao nhiêu? thì phát ăn ngay chắc được (Như kiểu NOVA)
  • 0