Đế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

#1 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 - 09:06 AM

Em có một bài toán như sau :

Em có 1 file txt : có 5 cột từ H1 – H5 .
File đính kèm : http://www.cadviet.c...108091_h1h5.txt
Yêu cầu đặt ra là viết 1 lisp thực hiện như sau :




Hình đã gửi

Trình tự lisp mong muốn:

Nhập số liệu từ file text :

Khoảng cách giữa các H1-H2 :

Khoảng cách giữa các H2-H3 :

Khoảng cách giữa các H3-H4 :

Khoảng cách giữa các H4-H5 :

Chọn điểm đặt cho dòng text :

Kết quả thu được là hàng text từ H1- H5 cách nhau 1 khoảng đã nhập được nhập vào trong bản cad.

File đính kèm :http://www.cadviet.c...091_yeu_cau.dwg

Hình đã gửi

Giả sử trong file số liệu .txt ban đầu của em có 100 dòng tương ứng với 100 lần nhập thì lisp tự động hỏi dòng lệnh :

Chọn điểm đặt dòng text 1:

Chọn điểm đặt dòng text 2:
......

Chọn điểm đặt dòng text 100


Em đang cần gấp. Mong các bác giúp đỡ ạ!



  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2012 - 09:32 AM

Chẳng hiểu nội dung chi mà lặp đi lặp lại, đã lấy từ số liệu rồi thì để nó chèn 1 lượt hết luôn, còn nhập khoảng cách h1-h2,h2-h3...với pick điểm đặt làm gì nữa bạn :o File có 10000 dòng chắc bạn làm tới sáng :(
  • 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


#3 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 - 09:38 AM

Chẳng hiểu nội dung chi mà lặp đi lặp lại, đã lấy từ số liệu rồi thì để nó chèn 1 lượt hết luôn, còn nhập khoảng cách h1-h2,h2-h3...với pick điểm đặt làm gì nữa bạn :o File có 10000 dòng chắc bạn làm tới sáng :(


Nghĩa là như thế nào hả bác ketxu? ý bác là lập thành 1 bảng luôn đúng không? Nhưng ý em là các mỗi một dòng ấy em sẽ chèn vào từng mặt cắt ngang . Nếu lập bảng thì em cũng phải copy tới sáng thật. Em cũng đang cần gấp . Mong bác chỉ giáo ạ!
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2012 - 09:44 AM

Nhập số liệu từ file text :
Khoảng cách giữa các H1-H2 :
Khoảng cách giữa các H2-H3 :

Khoảng cách giữa các H3-H4 :

Khoảng cách giữa các H4-H5 :

Chọn điểm đặt cho dòng text :

Kết quả thu được là hàng text từ H1- H5 cách nhau 1 khoảng đã nhập được nhập vào trong bản cad.

File đính kèm :http://www.cadviet.c...091_yeu_cau.dwg


Đoạn này để làm gì đây, khi mà mình đã lấy dữ liệu từ file txt ?????
Kết quả xuất ra chỉ là hàng H1,H2...H5 hay là cả số liệu phía trên và Line kẻ ???




  • 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


#5 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 - 09:49 AM

Đoạn này để làm gì đây, khi mà mình đã lấy dữ liệu từ file txt ?????
Kết quả xuất ra chỉ là hàng H1,H2...H5 hay là cả số liệu phía trên và Line kẻ ???
[/left][/left]


Chỉ lấy số liệu giá trị text thôi ạ... Cái line kẻ và cái chữ H1-H5 là em ghi minh họa ạ .
  • 0

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2012 - 09:53 AM

Mình hỏi 2 lần rồi, cái đoạn bạn ghi như dòng promt kia dùng để làm gì, khi mà các số liệu đấy đã lấy ra từ txt.
Nếu chỉ đơn thuần là tạo text thì yêu cầu của bạn không có vấn đề gì khó cả. Giờ mình ra công trường, lúc về chưa ai viết giúp bạn thì mình viết
  • 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


#7 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 - 10:00 AM

Mình hỏi 2 lần rồi, cái đoạn bạn ghi như dòng promt kia dùng để làm gì, khi mà các số liệu đấy đã lấy ra từ txt.
Nếu chỉ đơn thuần là tạo text thì yêu cầu của bạn không có vấn đề gì khó cả. Giờ mình ra công trường, lúc về chưa ai viết giúp bạn thì mình viết


Huhu. e tối trí chưa hiểu ý bác Ketxu lắm. Bác cứ viết xem ý bác có giống ý em không ạ. Em cảm ơn ạ
  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2012 - 10:12 AM

Chán bạn quá. Phần trình tự Lisp mong muốn tại sao lại có phần nhập khoảng cách H1-> H2, H2->H3 ... khi mà khoảng cách này đã lấy tương ứng ở file Txt ??????
Người viết chỉ viết khi đầy đủ dữ liệu cần biết, có ai ngồi không viết xong nộp bài chờ sửa đâu bạn :)
  • 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


#9 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 - 10:21 AM

Chán bạn quá. Phần trình tự Lisp mong muốn tại sao lại có phần nhập khoảng cách H1-> H2, H2->H3 ... khi mà khoảng cách này đã lấy tương ứng ở file Txt ??????
Người viết chỉ viết khi đầy đủ dữ liệu cần biết, có ai ngồi không viết xong nộp bài chờ sửa đâu bạn :)


Dạ vâng thế cũng được ạ.Bỏ khoảng cách H1-H2 H2-H3... đi ạ.
  • 0

#10 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2012 - 10:39 AM

Mà 5 H thì chỉ có 4 cột thôi bạn ạ. Lên 5 cột thì thành đến H6 mất
  • 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


#11 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 - 10:46 AM

Mà 5 H thì chỉ có 4 cột thôi bạn ạ. Lên 5 cột thì thành đến H6 mất


Em đoán bác ketxu không hiểu ý em rồi.

Ý em là như thế này nhé. Cái giá trị text mà trong file .txt là giá trị cần thể hiện lên (chứ đây không phải là khoảng cách ạ), cột H1 dòng 1 giá trị text là 1,58 , cột H2 dòng 1 giá trị text là 1,61 ..... vì thế nên em mới cần nhập khoảng cách giữa các cột ạ ( 5 cột thì có 4 khoảng cách) . Chỉ cần thể hiện giá trị text lên thôi ạ!
  • 0

#12 mathan

mathan

    biết vẽ rectang

  • Members
  • PipPip
  • 83 Bài viết
Điểm đánh giá: 57 (tàm tạm)

Đã gửi 08 June 2012 - 10:46 AM

Trùi bạn giải thích hơi khó hiểu và càng giải thích càng dối.
Để mình tóm tắt lại cho bác Ketxu và các bạn khác xem sao nhé.
Nếu chưa đúng bạn comment thêm (và các bác khác than ôi đừng ném đá).
B1: Có 1 file text như bạn nói, nhưng trong file k có sẵn khoảng cách các điểm, khoảng cách đó sẽ có trên bản vẽ để bạn nhập từng điểm một
Với mỗi mặt cắt ngang bạn sẽ phải nhập khoảng cách 4 lần và điểm đặt 1 lần
B2: Chạy lisp thì sẽ read file text cho bạn (file này chỉ là text cao độ),
Chạy từng hàng, một hàng bạn nhập khoảng cách 4 lần, và điểm đặt 1 lần như đã nói
Cách này thủ công thật, chỉ bớt được tí gian bạn nhập text còn lại thì cũng oải
Mình thấy bạn nên yêu gửi file và mong muốn đầy đủ hơn để ae có thể giúp bạn một phương án khả quan hơn
Đúng ý bạn muốn diễn đạt chưa nào
  • 0
-----------
Hình đã gửi Hãy chia sẻ để thấy có được nhiều hơn điều mình muốn!
Best regard,

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2012 - 11:03 AM


Em đoán bác ketxu không hiểu ý em rồi.

Ý em là như thế này nhé. Cái giá trị text mà trong file .txt là giá trị cần thể hiện lên (chứ đây không phải là khoảng cách ạ), cột H1 dòng 1 giá trị text là 1,58 , cột H2 dòng 1 giá trị text là 1,61 ..... vì thế nên em mới cần nhập khoảng cách giữa các cột ạ ( 5 cột thì có 4 khoảng cách) . Chỉ cần thể hiện giá trị text lên thôi ạ!

Viết xong rồi, đang định post lên - Đọc bài này của bạn phát bực!!! Mà đến cái hình minh họa cũng sai. Khoảng cách thì nó phải nằm giữa 2 text! Lại viết lại. Lần sau mong bạn giải thích đơn giản và chính xác những gì bạn cần, kẻo mất thời gian của bạn !!!
  • 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


#14 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 - 11:04 AM

Trùi bạn giải thích hơi khó hiểu và càng giải thích càng dối.
Để mình tóm tắt lại cho bác Ketxu và các bạn khác xem sao nhé.
Nếu chưa đúng bạn comment thêm (và các bác khác than ôi đừng ném đá).
B1: Có 1 file text như bạn nói, nhưng trong file k có sẵn khoảng cách các điểm, khoảng cách đó sẽ có trên bản vẽ để bạn nhập từng điểm một
Với mỗi mặt cắt ngang bạn sẽ phải nhập khoảng cách 4 lần và điểm đặt 1 lần
B2: Chạy lisp thì sẽ read file text cho bạn (file này chỉ là text cao độ),
Chạy từng hàng, một hàng bạn nhập khoảng cách 4 lần, và điểm đặt 1 lần như đã nói
Cách này thủ công thật, chỉ bớt được tí gian bạn nhập text còn lại thì cũng oải
Mình thấy bạn nên yêu gửi file và mong muốn đầy đủ hơn để ae có thể giúp bạn một phương án khả quan hơn
Đúng ý bạn muốn diễn đạt chưa nào


Đúng rồi đấy ạ . Em phải vẽ gần 3000 cái mặt cắt hoàn công của mấy tháng trời .Mong các bác chỉ giáo giúp em ạHình đã gửi
  • 0

#15 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 - 11:05 AM



Viết xong rồi, đang định post lên - Đọc bài này của bạn phát bực!!! Mà đến cái hình minh họa cũng sai. Khoảng cách thì nó phải nằm giữa 2 text! Lại viết lại. Lần sau mong bạn giải thích đơn giản và chính xác những gì bạn cần, kẻo mất thời gian của bạn !!!


Em xin lỗi vì không biết cách diễn đạt . Mong bác thông cảm và giúp đỡ ạ!
  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

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

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

Chúc bạn thành công.

(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"))
(while (setq rl (read-line fn))
(setq i 1 j 0
p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :"))
lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")")))
lstDisX
(reverse
(repeat (1- (length lstVal))
(setq lstDis (cons (getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) ":")) lstDis))
)
)
)
(mLstPnt p 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


#17 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:11 PM

Chúc bạn thành công.

 (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")) (while (setq rl (read-line fn)) (setq i 1 j 0 p (getpoint (strcat "\nDiem dat Text dong thu "(itoa (setq j (1+ j)))" :")) lstVal (mapcar 'vl-princ-to-string (read (strcat "(" rl ")"))) lstDisX (reverse (repeat (1- (length lstVal)) (setq lstDis (cons (getdist (strcat "\nKhoang cach tu cot H" (itoa i) "-> H" (itoa (setq i (1+ i))) ":")) lstDis)) ) ) ) (mLstPnt p lstDisX lstVal) (setq lstDis '()) ) (close fn) ) ) ) 


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 đỡ ạ
  • 0

#18 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:18 PM


Em xin lỗi vì không biết cách diễn đạt . Mong bác thông cảm và giúp đỡ ạ!

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: ")
k5 (getreal "\n Nhap khoang cach thu nam: ")
k6 (Getreal "\n Nhap khoang cach thu sau: ")
k7 (getreal "\n Nhap khoang cach thu bay: ")
k8 (getreal "\n Nhap khoang cach thu tam: ")
k9 (getreal "\n Nhap khoang cach thu chin: ")
kcl (list 0 k1 k2 k3 k4 k5 k6 k7 k8 k9)
)

(setq fn (getfiled "Select Data File" "" "txt" 0)
f (open fn "r")
k 1
)
(while (and (/= (setq str (read-line f)) nil)
(= (strcase (setq ans (getstring (strcat "\n Ban dang o dong du lieu thu " (rtos k 2 0) ". 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))
)
(setq k (1+ k))
)
(close f)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
Chúc bạn vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 08 June 2012 - 02:19 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 đỡ ạ

Theo mình Nova có thể giúp bạn ?
  • 0

#20 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:41 PM

Theo mình Nova có thể giúp bạn ?

Em không cài được trên win 7 32 bit. em không có cad 2005 bản chuẩn nữa. toàn bản key gen không General được
  • 0