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  
avi612

[Yêu cầu] Xin lisp chèn số liệu từ file ***.txt

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

avi612    15

Hiện tại mình đang làm một số lượng lớn các bảng tính khối lượng cho 1 công trình.

Trong đó có 1 thao tác mình cần làm đi làm lại nhiều lần là chèn "bảng khối lượng" đã tính vào trong bản vẽ tương ứng.

Nên hôm nay có ý nhờ mọi người viết giúp mình 1 cái Lisp để tối giản cái thao tác này.

_ Bảng tính của mình sau khi tính toán có thể chuyển thành file ****.txt

_ Từ file txt trên ta chèn vào trong CAD bằng cách xác định các thông số cơ bản như cao chữ, rộng cột, rộng hàng.

 

Ví dụ:

Lisp: chen_khoi_luong

- Command: chen_khoi_luong [Enter]

- Chọn điểm chèn: [point]

- Khai báo cao chữ: 1.7

- Rộng cột: 10

- Rộng hàng: 3 [enter] kết thúc lệnh.

 

Kết quả:

- Một table được tạo bằng các đường line đơn giản, với các thông số cột, hàng, cao chữ đã khai báo.

- Text là các đối tượng của Dtext.

 

Ví dụ trên chỉ là cách nghĩ riêng của mình, ai có có cách nào hay hơn thì xin giúp mình nhá.

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Hình 1: Số liệu ecxel trước khi chuyển qua txt.

ca1f80918865d229572e317604814acc_47707638.viduexcel.jpg

Hình 2: Chuyển file excel thành txt sau đó sử dụng lisp để cho ra kết quả giống như bên dưới.

 

a4b6f41784bdcd1a1688469821809a8f_47707636.viducad.jpg

 

 

 

 

 

Chỉnh sửa theo avi612

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
mathan    57

Up bản vẽ lên mọi người mới hiểu ý tưởng của bạn được

Hơn nữa, k up bản vẽ là bài bạn dễ vô thùng rác lắm đó :D

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
avi612    15

Mình chỉ biết trong CAD có chức năng Table nhưng ko thường xuyên sử dụng nên ko rành, còn những công cụ trích xuất từ Excel <-> CAD thì mình chưa biết.

Thế ketxu có bài hướng dẫn nào ko, cho mình link tham khảo thử nó đáp ứng được công việc hiện tại ko.

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
ketxu    2.653

Mình nói qua thôi nhé. Nó sẽ gồm 2 bước

B1 : Bạn sử dụng chức năng Datalink để tạo link, chọn file excel + sheet + vùng link của bạn

B2 : Sử dụng lệnh Table để tạo Table, chọn from Datalink

 

Công việc này nghe có vẻ lâu, nhưng luôn đảm bảo bạn có một bản sao ngon nghẻ

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
avi612    15

Đã làm theo cách bạn hướng dẫn, rất hay nhưng có 1 số điểm gặp phải như sau:

- Vì mình làm việc với 1 sll các bảng tính khối lượng nên khi áp dụng cách này thì cái thao tác tạo 1 Datalink mới phải làm đi làm lại nhiều lần.

- Trong khi đó có những file Excel, trong 1 sheet mình cần chèn đến 2 hay 3 vùng link khác nhau và nếu như có nhiều sheet như vậy thì thao tác tạo Datalink cũng phải làm nhiều lần mới được.

- Khi chúng ta chỉnh sửa toàn bản vẽ thì chỉnh sửa trong khung table như vậy cũng ko tiện, thường thì với những table như vậy mình thường Explode nó ra rồi dùng những bộ lọc để chọn và chỉnh sửa nó.

- Mình đã thử áp dụng cách này cho 2 bản vẽ thì thời gian làm cũng gần 40'......................hơi lâu...chắc cụng tại do mình cùi bắp...:))

------------------------------------------

Thanks ketxu đã chỉ cho cái lệnh Datalink này, nhưng mà cách áp dụng nó nhanh hơn 1 chút thì hay biết mấy.

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
ketxu    2.653

------------------------------------------

Thanks ketxu đã chỉ cho cái lệnh Datalink này, nhưng mà cách áp dụng nó nhanh hơn 1 chút thì hay biết mấy.

Có order thì có thể nghiên cứu :D

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
avi612    15

Vậy nhờ các cao thủ giúp giùm cho cái dụ này nhá..........

Làm gần 120 bản vẽ mà cứ ngồi rì rì như thế này chắc bị cắt lương quá, :wacko: ......chẳng may bị trảm nữa thì khổ. :)

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
phamthanhbinh    3.123

Vậy nhờ các cao thủ giúp giùm cho cái dụ này nhá..........

Làm gần 120 bản vẽ mà cứ ngồi rì rì như thế này chắc bị cắt lương quá, :wacko: ......chẳng may bị trảm nữa thì khổ. :)

Hề hề hề,

Chuyện này với lisp không quá khó, song bạn đã tìm kiếm chưa, trên diễn đàn đã có khá bộn các lisp tương tự, bạn la61y về dùng thử và thấy cái nào gần đáp ứng tốt nhất yêu cầu của bạn thì post lên, mọi người sẽ giúp bạn hoàn chỉnh nó.

Những yêu cầu kiểu này lặp đi lặp lại quá nhiều rồi, mà mỗi người lại thích một kiểu riêng nên khó có thể đáp ứng toàn bộ được.

cách tốt nhất là bạn nên tìm cái gần đúng nhất để chỉnh sửa thì sẽ nhanh hơn là ngồi lọ mọ lại từ đầu.

hề hề hề.

Tỷ dụ, đây là một cái lisp có sẵng trên diễn đàn, bạn dùng thử coi nó có ưng cái bụng không nhé.


(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 k5 k6 k7 k8 k9 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)
)

Lưu ý bạn là đây chỉ là một đoạn code để nhập các text chứ chưa có tạo bảng như bạn muốn. Song việc này không quá khó nữa sau khi bạn đã có các dòng text. Bạn có thể tự bổ sung thêm phần tạo bảng hoặc nếu bạn thấy nó dùng được thì post lên mọi người sẽ giúp bạn hoành chỉnh.

Mặt khác trên diễn đàn cũng đã có những lisp có tạo bảng hoàn chỉnh rồi. Có thể chúng chưa thật vừa ý nhưng bạn cứ dùng thử sẽ thấy nó cần bổ siung gì cho hoàn chỉnh cái bạn mong muốn.

Chúc bạn vúi.

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
avi612    15

Cảm ơn phamthanhbinh đã chia sẽ cho cái Lisp trên, nhưng thực sự công dụng của khác xa với ứng dụng hiện tại mình mong muốn.

Một số hạn chế của lisp trên so với công việc của mình.

- Nó chỉ cho mình nhập số liệu từ file ***.txt theo từng dòng xác định, nếu như nhiều dòng thì phải làm nhiều lần, canh chỉnh cũng khó khi ko kẻ khung định vị.

- Số lượng các cột cũng bị hạn chế, chỉ có 9 cột trong khi khối lượng của mình thường thì nhiều >9.

- Cũng đã thử seach trên forum các lisp có công dụng tương tự nhưng cũng chỉ đáp ứng được 20% công việc.

------------------------------------------------------------------------------------------------

Àh! mình cũng thử mò mẫn trong các bộ lisp của những phần mềm như Nova, AndDesign... thử tìm xem lisp xuất khối lượng của nó được viết như thế nào, vì ý của mình muốn có 1 lisp hoạt động tương tự như vậy, nhưng mà do khả năng yếu kém..................nên tìm hoài ko ra :).

Dù sao thì cũng thanks cái góp ý của phamthanhbinh, chắc từ từ mình tìm cách khắc phục vấn đề này, nếu ai có cách hay nhớ giúp mình nhá............:):):)

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
gia_bach    1.442

Cảm ơn phamthanhbinh đã chia sẽ cho cái Lisp trên, nhưng thực sự công dụng của khác xa với ứng dụng hiện tại mình mong muốn.

Một số hạn chế của lisp trên so với công việc của mình.

- Nó chỉ cho mình nhập số liệu từ file ***.txt theo từng dòng xác định, nếu như nhiều dòng thì phải làm nhiều lần, canh chỉnh cũng khó khi ko kẻ khung định vị.

- Số lượng các cột cũng bị hạn chế, chỉ có 9 cột trong khi khối lượng của mình thường thì nhiều >9.

- Cũng đã thử seach trên forum các lisp có công dụng tương tự nhưng cũng chỉ đáp ứng được 20% công việc.

------------------------------------------------------------------------------------------------

Àh! mình cũng thử mò mẫn trong các bộ lisp của những phần mềm như Nova, AndDesign... thử tìm xem lisp xuất khối lượng của nó được viết như thế nào, vì ý của mình muốn có 1 lisp hoạt động tương tự như vậy, nhưng mà do khả năng yếu kém..................nên tìm hoài ko ra :).

Dù sao thì cũng thanks cái góp ý của phamthanhbinh, chắc từ từ mình tìm cách khắc phục vấn đề này, nếu ai có cách hay nhớ giúp mình nhá............ :):) :)

Đừng cố gắng tìm kiếm trong LISP.

Sử dụng VBA(.Net) một phát từ Excel sang CAD luôn (bỏ qua file txt).

Hình như bên VBA có tool này rồi ???

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
avi612    15

Đã lướt qua thử bên VBA rồi nhưng tìm hok thấy topic nói về vấn đề này.

Nếu được gia_bach cho mình xin cái link :)

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  

×