Đến nội dung


Hình ảnh
- - - - -

Nhập các File *.lsp thành một file *.fas


  • Please log in to reply
10 replies to this topic

#1 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 25 September 2008 - 07:30 PM

Đoạn lisp sau (mới sưu tầm) cho phép nhập nhiều file *.lsp thành một file *.fas để thuận lợi khi load vào Cad chỉ một lần, nhưng mình nhập lệnh báo lỗi sau:
Command: cltf
; error: no function definition: DOS_GETDIR
Các bạn chỉ giúp, lỗi do đâu? Cách khắc phục
Đây là nội dung lisp
(defun c:cltf (/ lsp fas lst)
(setq lsp (dos_getdir "Browse for folder" " " "Select a folder as source" t))
(setq fas (dos_getdir "Browse for folder" " " "Select a folder as destination" t))
(setq lst (vl-directory-files lsp "*.lsp" 1))
(if
lst
(progn
(foreach x lst
(vlisp-compile
'st
(strcat lsp x)
(strcat fas (substr x 1 ( - (strlen x) 4)) ".fas")
)
) ; foreach
) ; progn
(alert "There is not contained file")
) ; if
(princ)
) ; defun
  • 0

#2 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 28 September 2008 - 07:10 PM

Không Bác nào giúp mình nhỉ?
  • 0

#3 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 28 September 2008 - 10:55 PM

Không Bác nào giúp mình nhỉ?

Chẳng ai hiểu gì về lisp này cả.

; error: no function definition: DOS_GETDIR - lỗi này là do không có hàm DOS_GETDIR. Hàm này nằm đâu thì ... chỉ có chúa và bạn mới biết.

Tóm lại, đoạn mã trên của bạn là một phần của một chương trình hoàn chỉnh. Bạn tìm nốt phần còn lại của chương trình rồi load lên thì hy vọng chương trình sẽ chạy đúng.
  • 0

#4 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 29 September 2008 - 08:00 PM

; error: no function definition: DOS_GETDIR - lỗi này là do không có hàm DOS_GETDIR. Hàm này nằm đâu thì ... chỉ có chúa và bạn mới biết.

Tóm lại, đoạn mã trên của bạn là một phần của một chương trình hoàn chỉnh. Bạn tìm nốt phần còn lại của chương trình rồi load lên thì hy vọng chương trình sẽ chạy đúng.

Phần còn lại, "sết" lòi mắt cũng không thấy, người ta viết chỉ có bấy nhiêu.
Chúa không biết hàm DOS_GETDIR và mình cũng không rành về list, mình chỉ biết là:
(setq lsp (dos_getdir "Browse for folder" " " "Select a folder as source" t))
để mở hộp thoại windows chuẩn để chọn thư mục chứa các files *.lsp cần đưa vào file *.fas
(setq fas (dos_getdir "Browse for folder" " " "Select a folder as destination" t))
để mở hộp thoại chọn thư mục lưu files *.fas
Tóm lại mình muốn một lisp thực hiện công việc đưa tất cả các file *.lsp vào một file *.fas hoặc *.vlx. Cái này thì bác Hoành rất biết, vậy thì bác giúp mình đi, chắc chắn nhiều người cũng "hít" cái lisp này. Cám ơn bác trước
  • 0

#5 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 29 September 2008 - 08:48 PM

Tóm lại mình muốn một lisp thực hiện công việc đưa tất cả các file *.lsp vào một file *.fas hoặc *.vlx. Cái này thì bác Hoành rất biết, vậy thì bác giúp mình đi, chắc chắn nhiều người cũng "hít" cái lisp này. Cám ơn bác trước

Cảm ơn bạn đã đề cao. Việc đưa các file lisp vào file fas hoặc vlx nằm ngoài khả năng của mình.
  • 0

#6 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 30 September 2008 - 07:49 AM

Tóm lại mình muốn một lisp thực hiện công việc đưa tất cả các file *.lsp vào một file *.fas hoặc *.vlx. Cái này thì bác Hoành rất biết, vậy thì bác giúp mình đi, chắc chắn nhiều người cũng "hít" cái lisp này. Cám ơn bác trước


Việc thực hiện cái này đã có AutoCAD làm rồi, đơn giản và dễ dùng. Tại sao phải lăn tăn đi tìm LISP để làm công việc đó.
  • 0

#7 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 30 September 2008 - 07:50 AM

Đoạn lisp sau (mới sưu tầm) cho phép nhập nhiều file *.lsp thành một file *.fas để thuận lợi khi load vào Cad chỉ một lần, nhưng mình nhập lệnh báo lỗi sau:

; error: no function definition: DOS_GETDIR

Đây là nội dung lisp
(setq lsp (dos_getdir "Browse for folder" " " "Select a folder as source" t))
(setq fas (dos_getdir "Browse for folder" " " "Select a folder as destination" t))


Đoạn lisp của bạn sử dụng hàm DOS_GETDIR , theo nhận xét của tui thì hàm này trong thư viện DOSLib.
DOSLib, is a library of AutoLISP-callable functions that provides a variety of Windows operating system capabilities to AutoCAD.
Nếu đúng bạn có thể tham khảo và download tại : http://en.wiki.mcnee...eel/DOSlib.html
  • 1

#8 tnmtpc

tnmtpc

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 370 Bài viết
Điểm đánh giá: 206 (khá)

Đã gửi 30 September 2008 - 11:11 AM

Việc thực hiện cái này đã có AutoCAD làm rồi, đơn giản và dễ dùng. Tại sao phải lăn tăn đi tìm LISP để làm công việc đó.

Bác vndesperados chỉ cho mình chiêu này đi, thực sự là mình chưa biết. Thanks
  • 0

#9 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 30 September 2008 - 12:11 PM

Bác vndesperados chỉ cho mình chiêu này đi, thực sự là mình chưa biết. Thanks



Từ cửa sổ màn hình sọan thảo LISP của AutoCad chọn FILE - Make Application - New Application Wizard
Chọn Simple hoặc Expert tùy theo nhu cầu.
Cái này cho phép tích hợp cả file DCL vào trong VLX, FAS luôn
  • 0

#10 bktec84

bktec84

    biết vẽ arc

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

Đã gửi 28 September 2009 - 10:28 PM

Từ cửa sổ màn hình sọan thảo LISP của AutoCad chọn FILE - Make Application - New Application Wizard
Chọn Simple hoặc Expert tùy theo nhu cầu.
Cái này cho phép tích hợp cả file DCL vào trong VLX, FAS luôn

Cái này tôi làm theo hướng dẫn của anh rồi nhưng ko hiểu tại sao khi làm Simple nhiều file *.lsp thì nó sẽ tạo thành file dạng *.vlx, còn khi dùng Expert thì không sao mà gộp nhiều file *.lsp vào thành một được? theo quan sát của mình thì có thể gộp 2 file *.lsp thì được. Còn nhiều hơn thì nó báo nỗi. Mong bạn chỉ dùm một cách cụ thể.
Mong sớm nhận được hồi âm của bạn.
  • 0

#11 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 22 November 2015 - 04:08 PM

Trước hết bạn phải tải các file doslib...arx vào thư mục support hoạc bất kỳ thư mục nào mà bạn đã add trong "support file search path. Tải các file doslib tại đây: http://www.en.na.mcneel.com/doslib.htm

Đây là lisp Thiep thêm arxload:

 

(cond ((eq (getvar "acadver") "19.0s (LMS Tech)")
(arxload "doslib19")
      )
      ((or (eq (getvar "acadver") "18.2s (LMS Tech)")
  (eq (getvar "acadver") "18.1s (LMS Tech)")
  (eq (getvar "acadver") "18.0s (LMS Tech)")
       )
(arxload "doslib18")
      )
      ((or (eq (getvar "acadver") "17.2s (LMS Tech)")
  (eq (getvar "acadver") "17.1s (LMS Tech)")
  (eq (getvar "acadver") "17.0s (LMS Tech)")
       )
(arxload "doslib17")
      )
)
(defun c:cltf (/ lsp fas lst)
    (setq
        lsp (dos_getdir "Browse for folder" " " "Select a folder as source" t)
    )
    (setq fas (dos_getdir "Browse for folder"
                          " "
                          "Select a folder as destination"
                          t
              )
    )
    (setq lst (vl-directory-files lsp "*.lsp" 1))
    (if lst
        (progn
            (foreach x lst
                (vlisp-compile 'st
                               (strcat lsp x)
                               (strcat fas (substr x 1 (- (strlen x) 4)) ".fas")
                )
            )                                     ; foreach
        )                                         ; progn
        (alert "There is not contained file")
    )                                             ; if
    (princ)
)  

Tuy nhiên, lisp trên chỉ compiler mỗi một file *.lsp thành 1 file *.fas. Chưa biết làm sao compiler nhiều file thành 1 file được. (Nếu làm trong VLISP thì ok rồi)


  • 0