Đến nội dung


Hình ảnh
- - - - -

Tạo file nháp cho biến


  • Please log in to reply
5 replies to this topic

#1 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 19 November 2010 - 01:20 PM

Mình muốn tạo một file nháp các biến của 1 lsp, để tránh các lsp chạy chồng chéo sẽ bị đè biến của nhau, không biết bạn nào biết chỉ dùm mình một chút.
VD: Mình có 1 lsp sử dụng biến a b c d
và 1 lsp nào đó cũng sử dụng chung biến a nhưng không triệt tiêu khi kết thúc lsp. Nên như thế khi chạy sẽ gây ra lỗi chương trình.
Giờ mình muốn tạo 1 file nháp của lsp. Tức khi chạy lisp nó sẽ nháp trong file đấy và các biến không triệt tiêu sau khi kết thúc lệnh chỉ triệt tiêu khi thoát khỏi Cad thôi.
Liệu có được không các bạn?
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#2 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 19 November 2010 - 04:55 PM

Mình muốn tạo một file nháp các biến của 1 lsp, để tránh các lsp chạy chồng chéo sẽ bị đè biến của nhau, không biết bạn nào biết chỉ dùm mình một chút.
VD: Mình có 1 lsp sử dụng biến a b c d
và 1 lsp nào đó cũng sử dụng chung biến a nhưng không triệt tiêu khi kết thúc lsp. Nên như thế khi chạy sẽ gây ra lỗi chương trình.
Giờ mình muốn tạo 1 file nháp của lsp. Tức khi chạy lisp nó sẽ nháp trong file đấy và các biến không triệt tiêu sau khi kết thúc lệnh chỉ triệt tiêu khi thoát khỏi Cad thôi.
Liệu có được không các bạn?


Theo mình bạn nên dùng các lệnh về key registry mà xài, đảm bảo các biến sẽ không đè lên nhau, thoát Cad nếu bạn không hủy thì các biến này vẫn sống nhăn, miễn sào bạn không đóng băng là OK!!!

VD:
(defun EX_regedit(str_key str_value)
(vl-registry-write "HKEY_CURRENT_USER\0_DNPP_ULT" str_key str_value)
)

(defun IM_regedit(str_key / tam)
(setq tam (vl-registry-read "HKEY_CURRENT_USER\0_DNPP_ULT" str_key))
tam
)

  • 1
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 19 November 2010 - 05:08 PM

Mình muốn tạo một file nháp các biến của 1 lsp, để tránh các lsp chạy chồng chéo sẽ bị đè biến của nhau, không biết bạn nào biết chỉ dùm mình một chút.
VD: Mình có 1 lsp sử dụng biến a b c d
và 1 lsp nào đó cũng sử dụng chung biến a nhưng không triệt tiêu khi kết thúc lsp. Nên như thế khi chạy sẽ gây ra lỗi chương trình.
Giờ mình muốn tạo 1 file nháp của lsp. Tức khi chạy lisp nó sẽ nháp trong file đấy và các biến không triệt tiêu sau khi kết thúc lệnh chỉ triệt tiêu khi thoát khỏi Cad thôi.
Liệu có được không các bạn?

Thì cứ làm như những gì bạn đã nghĩ vậy. Các biến sẽ đuợc lưu vào 1 file text nào đó trước khi kết thúc lệnh. tất nhiên bạn vẫn fải giải phóng biến ra khỏi bộ nhớ khi kết thúc lệnh. khi gọi lệnh hãy thêm đoạn code đọc nội dung của file text này. cách này có thể giữ được giá trị của biến cho các phiên làm việc sau mỗi khi bật cad
VD biến a của bạn. có thể viết 1 file text có nội dung (setq a x b Y d Z....) vào 1 file text nào đó rồi đọc file này mỗi khi lệnh đc goi
Cách khác: bạn có thể gộp chung tất cả các biến cần cần thiết của 1 lệnh vào 1 list
VD: (setq Lst (list a b c d)) và định nghĩa duy nhất biến Lst là biến toàn cục và giải phóng các biến a b c d. lấy giá trị a từ lst như thế nào thì chắc bạn biết rồi
Cách khác nữa: Hãy viết code làm sao để tránh việc tự đưa mình vào thế khù khoằm như trên (Vlide cung cấp cho bạn công cụ project rất hữu dụng để quản lý các lisp của bạn) :iluvyousmiley:
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#4 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 19 November 2010 - 05:48 PM

Thì cứ làm như những gì bạn đã nghĩ vậy. Các biến sẽ đuợc lưu vào 1 file text nào đó trước khi kết thúc lệnh. tất nhiên bạn vẫn fải giải phóng biến ra khỏi bộ nhớ khi kết thúc lệnh. khi gọi lệnh hãy thêm đoạn code đọc nội dung của file text này. cách này có thể giữ được giá trị của biến cho các phiên làm việc sau mỗi khi bật cad
VD biến a của bạn. có thể viết 1 file text có nội dung (setq a x b Y d Z....) vào 1 file text nào đó rồi đọc file này mỗi khi lệnh đc goi
Cách khác: bạn có thể gộp chung tất cả các biến cần cần thiết của 1 lệnh vào 1 list
VD: (setq Lst (list a b c d)) và định nghĩa duy nhất biến Lst là biến toàn cục và giải phóng các biến a b c d. lấy giá trị a từ lst như thế nào thì chắc bạn biết rồi
Cách khác nữa: Hãy viết code làm sao để tránh việc tự đưa mình vào thế khù khoằm như trên (Vlide cung cấp cho bạn công cụ project rất hữu dụng để quản lý các lisp của bạn) :iluvyousmiley:

Ừm mình định viết 1 chương trình nhỏ sử dụng nhiều biến nhưng biến không thể bị triệt tiêu, và sợ khi đang dùng chương trình thì sử dụng lsp khác dẫn đến thêm biến bất hợp lý ghi đè vào làm cho chương trình mình chạy là sai. Mình cũng nghĩ sẽ ghi nháp ra file txt nhưng có một vấn đề đối với các biến đơn thì việc đó rất hiệu quả nhưng đối với các biến là list thì mình vẫn nghĩ chưa thông.
VD file txt có dạng tên biến giá trị
a 12
b h15
c là list thì mình vẫn chưa nghĩ ra cách ghi và gọi lại biến này.
Mong các bạn chỉ thêm cho mình hiểu rõ hơn.
@Thaistreets mình đang dùng vlide để viết mà, cảm ơn bạn góp ý.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#5 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 19 November 2010 - 09:41 PM

Ừm mình định viết 1 chương trình nhỏ sử dụng nhiều biến nhưng biến không thể bị triệt tiêu, và sợ khi đang dùng chương trình thì sử dụng lsp khác dẫn đến thêm biến bất hợp lý ghi đè vào làm cho chương trình mình chạy là sai. Mình cũng nghĩ sẽ ghi nháp ra file txt nhưng có một vấn đề đối với các biến đơn thì việc đó rất hiệu quả nhưng đối với các biến là list thì mình vẫn nghĩ chưa thông.
VD file txt có dạng tên biến giá trị
a 12
b h15
c là list thì mình vẫn chưa nghĩ ra cách ghi và gọi lại biến này.
Mong các bạn chỉ thêm cho mình hiểu rõ hơn.
@Thaistreets mình đang dùng vlide để viết mà, cảm ơn bạn góp ý.

Bạn nên ghi các biến vào trong file script trước khi dùng lisp thì run file script này là được. Nội file script dùng hàm (setq ....) bình thường.
  • 2
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#6 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 20 November 2010 - 08:55 AM

Ừm mình định viết 1 chương trình nhỏ sử dụng nhiều biến nhưng biến không thể bị triệt tiêu, và sợ khi đang dùng chương trình thì sử dụng lsp khác dẫn đến thêm biến bất hợp lý ghi đè vào làm cho chương trình mình chạy là sai. Mình cũng nghĩ sẽ ghi nháp ra file txt nhưng có một vấn đề đối với các biến đơn thì việc đó rất hiệu quả nhưng đối với các biến là list thì mình vẫn nghĩ chưa thông.
VD file txt có dạng tên biến giá trị
a 12
b h15
c là list thì mình vẫn chưa nghĩ ra cách ghi và gọi lại biến này.
Mong các bạn chỉ thêm cho mình hiểu rõ hơn.
@Thaistreets mình đang dùng vlide để viết mà, cảm ơn bạn góp ý.

Giả sử mình muốn lưu các biến A giá trị là (list X Y..) vào 1 file tạm nào đó tên là tempfile.xxx chẳng hạn.
- Đầu tiên ta xác định luôn là nó sẽ đc ghi vào 1 thư mục support nào đó của cad để dễ dàng sử dụng nó. ở đây mình lấy thư mục có chứa file acad.dcl nhé
(setq tempfile (open (strcat (acet-filename-directory (findfile "acad.dcl")) "tempfile.xxx") "W") i 0)
- giờ ta sẽ ghi vào tempfile.xxx nội dung như sau: (setq A (list X Y ...))
(princ "(setq A (list \n" tempfile)
(repeat (length A)
(write-line (strcat "\""(nth i A)"\"") tempfile)
(setq i (1+ i)))
(close tempfile)

- OK, đã xong cái file tạm. giờ chỉ việc load nội dung của nó vào lisp. vì file này đã được tạo ra trong thư mục support của cad lên bạn chỉ cần sử dụng 1 câu thần chú đơn giản là bạn đã có cái bạn cần
(if (setq tempfile.xxx (findfile "tempfile.xxx")) (load tempfile.xxx) (prompt "Khong tim thay file tempfile.xxx"))
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD