duongthanh85 4 Báo cáo bài đăng Đã đăng Tháng 8 15, 2009 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. 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: tm2Ghi 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
q288 166 Báo cáo bài đăng Đã đăng Tháng 8 15, 2009 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) ) 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