Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
12 replies to this topic

#1 avi612

avi612

    biết lệnh move

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

Đã gửi 31 July 2012 - 10:59 AM

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.

Hình đã gửi


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.

Hình đã gửi






Bài viết đã được chỉnh sửa nội dung bởi avi612: 31 July 2012 - 11:23 AM

  • 0

#2 mathan

mathan

    biết vẽ rectang

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

Đã gửi 31 July 2012 - 11:03 AM

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
  • 0
-----------
Hình đã gửi Hãy chia sẻ để thấy có được nhiều hơn điều mình muốn!
Best regard,

#3 avi612

avi612

    biết lệnh move

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

Đã gửi 31 July 2012 - 11:26 AM

đã chỉnh bài viết có thêm hình.....
Mọi người xem và cho ý kiến giúp mình
  • 0

#4 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 July 2012 - 11:34 AM

Sao từ Excel bạn không sử dụng các công cụ trích xuất table từ Excel <-> CAD ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 avi612

avi612

    biết lệnh move

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

Đã gửi 31 July 2012 - 11:49 AM

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.
  • 0

#6 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 July 2012 - 12:00 PM

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ẻ
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#7 avi612

avi612

    biết lệnh move

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

Đã gửi 31 July 2012 - 01:00 PM

Đã 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.
  • 0

#8 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 July 2012 - 01:05 PM

------------------------------------------
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
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 avi612

avi612

    biết lệnh move

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

Đã gửi 31 July 2012 - 02:38 PM

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ổ. :)
  • 0

#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 31 July 2012 - 04:39 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 avi612

avi612

    biết lệnh move

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

Đã gửi 01 August 2012 - 12:06 PM

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á............:):):)
  • 0

#12 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 01 August 2012 - 12:17 PM

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 ???
  • 0

#13 avi612

avi612

    biết lệnh move

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

Đã gửi 01 August 2012 - 02:38 PM

Đã 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 :)
  • 0