Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
duongthanh85

Lisp bị lỗi khi gán giá trị text cộng dồn

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

Chương trình có ý tưởng như sau:

Chọn các text bởi chuột theo thứ tự mong muốn, nhấn enter để kết thúc việc lựa chọn. Gán tất cả giá trị text này vào 1 biến trong vòng lặp cách nhau bởi dấu TAB. Kết thúc ghi ra 1 dòng vào file text.

 

123.jpg

 

Như với hình này sẽ chọn lần lượt a,b,c... sau đó đo chiều dài; khi em làm không có vòng lặp while chọn text - tức chỉ chọn 2 text- thì chạy ngon lành.

 

Khi thêm vòng lặp để chọn nhiều text, chạy thử tới bước chọn tới đối tượng thứ 2 thì bị lỗi, lỗi báo như sau:

 

Command: tm2

Ghi ten file luu ket qua: 12.txt

Chon Text thu nhat :

Chon Text tiep:; error: bad argument type: stringp nil

 

Lisp em viết như sau:

(defun c:tm2(/ fname obj1 obj2 txt1 txt2 txt3 po1 po2 s)
(vl-load-com)
(setq fname (getstring "\nGhi ten file luu ket qua: "))
(if (setq fname (open fname "a"));open file
(while
(while
(setq obj1 (entsel "\nChon Text thu nhat :"))
(setq obj2 (entsel "\nChon Text tiep:"))
(setq txt1 (cdr (assoc 1 (entget (car obj1))))
	  txt2 (cdr (assoc 1 (entget (car obj2))))
)
(if (and txt1 txt2)
(setq txt3 (strcat txt3 "\t" txt1 "\t" txt2)))
)






(setq po1 (getpoint "\n Pick diem dau :") S 0 i 0)
	(while
	(setq po2 (getpoint po1 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
	(setq S (+ S (distance po1 po2)) po1 po2)
	)
(setq ghichu (getstring "\nGhi chu sau ket qua: "))

(if (and txt3 s)
(write-line (strcat txt3 "\t" (rtos s) "\t" ghichu) fname) )


)
(close fname);close file
)  
(princ)
)

Trong lisp này có sử dụng code tham khảo từ cadviet)

 

 

 

Mong các huynh xem giùm em xem em viết sai đoạn nào và cần sửa ra sao?

Em cám ơn nhiều.

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
Chương trình có ý tưởng như sau:

Chọn các text bởi chuột theo thứ tự mong muốn, nhấn enter để kết thúc việc lựa chọn. Gán tất cả giá trị text này vào 1 biến trong vòng lặp cách nhau bởi dấu TAB. Kết thúc ghi ra 1 dòng vào file text.

 

Các vòng while của bạn không có điều kiện để thoát ra. Mình viết lại như sau, do không biết file kế quả của bạn như thế nào nên mình sửa không biết có đúng ý bạn không, bạn xem lại nhé.

;; free lisp from cadviet.com
(defun c:tm2(/ fname obj1 obj2 txt1 txt2 txt3 po1 po2 s)
 (vl-load-com)
 (setq fname (open (getstring "\nGhi ten file luu ket qua: ") "a")
     obj1 (entsel "\nChon Text thu nhat :")
     txt1 (cdr (assoc 1 (entget (car obj1))))
     obj2 (entsel "\nChon Text tiep:")
     txt3 txt1
 )

 (while obj2    
    (setq txt2 (cdr (assoc 1 (entget (car obj2)))))
    (if (and txt3 txt2)
       (setq txt3  (strcat txt3 "\t" txt2))
   )
   (setq obj2 (entsel "\nChon Text tiep:"))
 )

 (setq po1 (getpoint "\n Pick diem dau :") S 0 i 0
       po2 (getpoint po1 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))

 (while po2
    (setq S (+ S (distance po1 po2))
  po1 po2
  po2 (getpoint po1 "\n Pick diem tiep theo de tinh khoang cach/ Enter de ket thuc :"))
 )

 (setq ghichu (getstring "\nGhi chu sau ket qua: "))
 (if (and txt3 s)
    (write-line (strcat txt3 "\t" (rtos s) "\t" ghichu) fname)
 )
 (close fname)
 (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

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  

×