Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2851 replies to this topic

#1281 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 27 August 2012 - 10:02 PM

Ket ơi!
1). Đã thử ngâm cứu method New của Excell Application Object mà đang bí.
2). Tạo file theo kiểu (setq pw (open "D:\\a.xls" "w")) (close pw)) thì file "a.xls" về bản chất nó là Text (Tab delimited) chứ không phải Excel. Sau khi tạo xong, Ket mở nó ra rồi lưu lại thì sẽ thấy nó lòi "bộ mặt thật" lên ngay. Mà bác thì đang muốn 1 file excel thực sự vì còn nhiều vấn đề sau đó nữa.
3). Và tại sao thêm cái này khó hiểu nữa (đã hỏi ở trên):
(setq pw (open "C:\\a.xls" "w")) (close pw)) thì không thấy file "a.xls" ở trong C
(setq pw (open "D:\\a.xls" "w")) (close pw)) thì thấy file "a.xls" ở trong D
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1282 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 August 2012 - 11:00 PM

Theo cháu thì
1+2 . Vậy thì khó đây ^^ Bác nghiên cứu cách dùng trong lisp excel của Terry nhé
3 : chắc do hàm open bác ạ ^^
  • 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


#1283 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

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

Đã gửi 27 August 2012 - 11:05 PM

Làm sao để tạo 1 file Excel mới với tên kèm path cho trước, bằng lisp?
File này bản chất phải là xls chứ không phải csv.
Ai biết xin chỉ giùm.

Bạn tham khảo lisp này, hàm Openexcel http://web2.airmail....SP/GetExcel.lsp
  • 0

#1284 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 27 August 2012 - 11:06 PM

Ái dà! Đang nghiên cứu hàm của Terry Miller đây, mà vẫn bí.
@ThuyLinh313: cám ơn bạn. Tớ đang nghiên cứu chính nó đây, mà chưa tìm ra.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1285 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 28 August 2012 - 06:30 AM

Ái dà! Đang nghiên cứu hàm của Terry Miller đây, mà vẫn bí.
@ThuyLinh313: cám ơn bạn. Tớ đang nghiên cứu chính nó đây, mà chưa tìm ra.

Code đây bác :
Hàm creat file Excel :
(CRE "C:\\Tue_NV.xls")

(defun cre(exf / saveas xlCells xlApp)
;;;ex: (Cre "C:\\Tue_NV.xls")
(defun saveas (xlApp f)
(vlax-invoke-method (vlax-get-property xlApp "ActiveWorkbook")
"SaveAs" f -4143 "" "" :vlax-false :vlax-false nil)
)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlCells (vlax-get-property
(vlax-get-property
(vlax-get-property
(vlax-invoke-method
(vlax-get-property xlApp "Workbooks")
"Add")
"Sheets")
"Item" 1)
"Cells"))
(vlax-put-property xlCells 'Item 1 1 "")
(vla-put-visible xlApp :vlax-true)
(if (findfile exf)
(progn (initget "Y N") (setq key (getkword "Tep da co. Luu de Y/N ?"))
(if (= key "Y") (saveas xlApp exf))
)
(saveas xlApp exf)
)
(vlax-invoke-method (vlax-get-property xlapp "ActiveWorkbook") 'Close :vlax-true)
(vlax-invoke-method xlapp 'Quit)

(mapcar
(function (lambda (x)
(vl-catch-all-apply
(function (lambda ()(if x (vlax-release-object x)))))))
(list xlCells xlApp))
(gc) (gc)
)

  • 3

#1286 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 28 August 2012 - 08:31 AM

(setq pw (open "C:\\a.xls" "w")) (close pw)) thì không thấy file "a.xls" ở trong C

Cái này mình nghĩ do vđ bảo mật, từ winxp trở về trước thì bình thường. các win sau này kg cho những hàm open thông thường ghi file vào đĩa hệ thống có lẽ nghi virus. Viết trên VC++ và Delphi cũng bị như vậy. Có lẽ nó cần xin phép hệ thống mới đc nhưng mình cũng chưa biết xin phép như thế nào. Mình nghĩ vậy, kg biết đúng kg
  • 0

#1287 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 28 August 2012 - 08:46 AM

Cái này mình nghĩ do vđ bảo mật, từ winxp trở về trước thì bình thường. các win sau này kg cho những hàm open thông thường ghi file vào đĩa hệ thống có lẽ nghi virus. Viết trên VC++ và Delphi cũng bị như vậy. Có lẽ nó cần xin phép hệ thống mới đc nhưng mình cũng chưa biết xin phép như thế nào. Mình nghĩ vậy, kg biết đúng kg

Máy Laptop của Tue_NV dùng Win7 : sử dụng (setq pw (open "C:\\a.xls" "w")) (close pw)) thì thấy file "a.xls" ở trong C
Máy cơ quan sử dụng Winxp cũng thấy file "a.xls" ở trong C
  • 0

#1288 t031285

t031285

    biết vẽ rectang

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

Đã gửi 05 September 2012 - 03:53 PM

Các bác cho e hỏi trong đoạn lisp dưới đây:

(Defun c:Tmu (/ d1 d2 d3 d4);(THEPSAN) (setvar "angbase" 0) ;(setvar "clayer" ....) (command "ortho" "on") (setq d1 (getpoint "\nDiem thu nhat:")) (setq d2 (getpoint d1"\nDiem thu hai:")) (setq goc (angle d1 d2)) (setvar "osmode" 0) (setq d3 (POLAR d1 (+ goc (/ pi 2)) 3)) (setq d4 (polar d3 goc (distance d1 d2))) (Command "_.pline" d1 d3 d4 d2 "" ) (setvar "osmode" 641) (princ) )
Đoạn :
(Command "_.pline" d1 d3 d4 d2 "" )
là vẽ đoạn thẳng bằng polyline.Nay nếu vẽ đoạn này bằng line thì khi vẽ xong thêm dòng lệnh nào để join chúng lại?Thanks.
  • 0

#1289 AutocadLisp

AutocadLisp

    biết pan

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

Đã gửi 05 September 2012 - 04:00 PM

Mỗi một lần command bạn sẽ lấy lại ename đối tượng vừa tạo bằng (entlast), cho vào trong một list ename rồi sau đó làm gì tùy bạn
  • 0

#1290 t031285

t031285

    biết vẽ rectang

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

Đã gửi 05 September 2012 - 04:18 PM

Mỗi một lần command bạn sẽ lấy lại ename đối tượng vừa tạo bằng (entlast), cho vào trong một list ename rồi sau đó làm gì tùy bạn

Mình không hiểu.
Đoạn : (Command "_.pline" d1 d3 d4 d2 "" ) nếu sửa thành :
(Command "line" d1 d3 d4 d2 "" ) thì nó sẽ vẽ hình dạng này là các đường line tạo thành 1 hình.Giờ thêm đoạn gì để nó JOIN các line này thành một.Thanks.
  • 0

#1291 AutocadLisp

AutocadLisp

    biết pan

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

Đã gửi 05 September 2012 - 04:29 PM

Mình k có CAD ở đây, nói qua thế này nhé :
Bạn thêm dòng (setq e (entlast)) trước dòng command
Sau dòng command thì thêm (while (setq e (entnext e))(setq lstName (cons e lstName)))
lstName là danh sách toàn bộ các ename của các Line bạn vừa tạo ra
Sau đó bạn dùng command pedit để join các Line này lại. Cách viết command Pedit ra sao thì bạn nên thực hiện thử để tìm.
Có thể là (command "pedit" "m" (acet-list-to-ss lstName) "" "" "j" "0" "" "") hoặc gần như vậy, mình k nhớ chính xác (còn phụ thuộc biến peditaccept của bạn nữa)
Ngoài ra, thay vì cho tất cả vòa list lstName, bạn cũng có thể dùng ssadd e để tạo luôn tập chọn.
Chưa biết khả năng lisp của bạn, nên mình phác ra vậy, bạn nên thử tìm hiểu trước nhé, Không được thì hỏi tiếp, các bác trên này sẽ giúp bạn

P/s : có 1 điều lạ là khi nối vào nó sẽ thành Pline, không khác gì dùng Pline, vậy mục đích của bạn là gì ?? Bạn thích trèo qua đỉnh chứ k đi hầm xuyên núi à ?
  • 1

#1292 t031285

t031285

    biết vẽ rectang

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

Đã gửi 05 September 2012 - 04:38 PM

Đang mày mò bác ah,khi ngồi trên cad bác làm thử cho e đoạn lisp ở bài 1288 bằng cách JOIN nha.Thanks.
  • 0

#1293 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 06 September 2012 - 11:36 AM

Hugo007 thử đổi thành "VHELVCN_0.TTF" xem có lỗi không. Tôi cũng có font "VHELVCN.TTF" nhưng vẫn lỗi. Sửa lại "VHELVCN_0.TTF" thì không lỗi, nhưng chưa tìm ra nguyên nhân vì sao.

Bác Ha ơi mình cũng bị lỗi như vậy sau khi vào trong thư mục font của cad đổi tên VHELVCN.TTF thành VHELVCN_0.TTF khi vào cad nó vẫn báo là font không tồn tại.
Specify full font name or font filename (TTF or SHX) <txt>: VHELVCN.TTF
Font file doesn't exist.

Bác có cách nào giúp e với.Thanks.
  • 0

#1294 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 06 September 2012 - 11:51 AM

Bác Ha ơi mình cũng bị lỗi như vậy sau khi vào trong thư mục font của cad đổi tên VHELVCN.TTF thành VHELVCN_0.TTF khi vào cad nó vẫn báo là font không tồn tại.
Specify full font name or font filename (TTF or SHX) <txt>: VHELVCN.TTF
Font file doesn't exist.
Bác có cách nào giúp e với.Thanks.

Bạn up bản vẽ lên xem nhé! Hugo007 và Hugo75 bà con nhau à?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#1295 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 07 September 2012 - 02:45 AM

Code đây bác :
Hàm creat file Excel :
(CRE "C:\\Tue_NV.xls")


(defun cre(exf / saveas xlCells xlApp)
;;;ex: (Cre "C:\\Tue_NV.xls")
(defun saveas (xlApp f)
(vlax-invoke-method (vlax-get-property xlApp "ActiveWorkbook")
"SaveAs" f -4143 "" "" :vlax-false :vlax-false nil)
)
(setq xlApp (vlax-get-or-create-object "Excel.Application")
xlCells (vlax-get-property
(vlax-get-property
(vlax-get-property
(vlax-invoke-method
(vlax-get-property xlApp "Workbooks")
"Add")
"Sheets")
"Item" 1)
"Cells"))
(vlax-put-property xlCells 'Item 1 1 "")
(vla-put-visible xlApp :vlax-true)
(if (findfile exf)
(progn (initget "Y N") (setq key (getkword "Tep da co. Luu de Y/N ?"))
(if (= key "Y") (saveas xlApp exf))
)
(saveas xlApp exf)
)
(vlax-invoke-method (vlax-get-property xlapp "ActiveWorkbook") 'Close :vlax-true)
(vlax-invoke-method xlapp 'Quit)

(mapcar
(function (lambda (x)
(vl-catch-all-apply
(function (lambda ()(if x (vlax-release-object x)))))))
(list xlCells xlApp))
(gc) (gc)
)

bác Tue ơi, cái này dùng để gọi file .xls? vậy em muốn gọi 1 file .xls có trong ổ C thì lệnh là CRE?
  • 0

#1296 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 07 September 2012 - 06:13 AM

bác Tue ơi, cái này dùng để gọi file .xls? vậy em muốn gọi 1 file .xls có trong ổ C thì lệnh là CRE?

Cái đó là tạo 1 file excell mới toanh trong ổ C theo câu hỏi của bác DoanVanHa
Còn gọi file .xls, tức là kêu file excell ra thì dùng cái này :

(if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls"))
  • 1

#1297 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 07 September 2012 - 10:10 AM

Bác Ha ơi mình cũng bị lỗi như vậy sau khi vào trong thư mục font của cad đổi tên VHELVCN.TTF thành VHELVCN_0.TTF khi vào cad nó vẫn báo là font không tồn tại.
Specify full font name or font filename (TTF or SHX) <txt>: VHELVCN.TTF
Font file doesn't exist.
Bác có cách nào giúp e với.Thanks.

Nên dùng cái tên hệ thống đặt cho nó. Thay vì viết VHELVCN.TTF hay hay VHELVCN_0.TTF bạn hãy dùng VNI-Helve-Condense
  • 1

#1298 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 07 September 2012 - 10:42 PM

Cái đó là tạo 1 file excell mới toanh trong ổ C theo câu hỏi của bác DoanVanHa
Còn gọi file .xls, tức là kêu file excell ra thì dùng cái này :

(if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls"))

vậy phải thêm (Defun c: Tue () (if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls")))
vào đây nữa phải không bác mà em gọi Tue_NV.xls đã tạo sẵn trong ổ C mà gọi không được, nó báo nil
  • 0

#1299 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 08 September 2012 - 06:24 AM

vậy phải thêm (Defun c: Tue () (if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls")))
vào đây nữa phải không bác mà em gọi Tue_NV.xls đã tạo sẵn trong ổ C mà gọi không được, nó báo nil

Chú ý trước (Defun c: thì không có khoảng trắng. Bạn viết có khoảng trắng rồi đấy
Dòng
(Defun c:Tue () (if (findfile "C:\\Tue_NV.xls") (command "ai_editcustfile" "C:\\Tue_NV.xls")))
gọi file Tue_NV.xls ra bình thường.
Giờ ý bạn muốn thêm là thêm tên lệnh à?
Thêm tên lệnh thì như trên là ok

Hoặc có 1 điều nữa là lệnh "ai_editcustfile" trong máy bạn sử dụng không được
Bạn thử lệnh "ai_editcustfile" trong máy của bạn chưa? Có hoạt động không?
Nếu không hoạt động thì mình sẽ viết kiểu khác, không dùng command nữa
  • 0

#1300 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 09 September 2012 - 09:06 AM

à đúng rồi, tại em cứ gõ như tiếng việt nên sau dấu : là phải cách cho nên mới sai. nhưng mà em dùng lệnh
Command: ai_editcustfile
Custom File to edit:
File could not be found.

nó vẫn chạy mà sao dùng:
Command: tue
nil
(vẫn báo mà không hiện gì cả)
  • 0