Đến nội dung


Hình ảnh
- - - - -

[Help me] Cách lấy số liệu từ file txt


  • Please log in to reply
47 replies to this topic

#41 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 08 December 2011 - 04:21 PM

Anh xem giúp cho em chương trình này.Em vẫn giữ nguyên hàm của anh ketxu,em chỉ thay cái hàm tính ebows45 bằng 1 hàm khác có nhiều biến hơn là nó báo lỗi.


(apply 'draw (append val (list pt)))
(defun draw (Loai D X G tsmall WT T1 A r1 C D1 P1 / OldOS)


Bạn xem lại 2 dòng code ở trên:
Hàm (append val (list pt)) này trả lại 1 danh sách là các biến của hàm draw. Có bao nhiêu thì chắc bạn biết (hình như 4 ?)
Hàm draw ở dưới có 12 biến.
Vậy thì sao dùng được!
Trước hết là lỗi ở đây. Còn lỗi nào nữa thì tôi cũng chịu, vì cái dialoge của Ketxu viết nên hỏi Ketxu may ra giúp được
  • 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.


#42 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 December 2011 - 08:33 PM

(apply 'Function (list các biến)) = (function các biến). Số lượng biến nhiều hay ít không quan trọng, quan trọng là cái list thu về đăng sau chữ apply 'Draw nó có cùng số biến với hàm bạn viết thôi hay không.
Ngoài ra, chẳng ai giúp đc bạn nếu bạn không post thông báo lỗi lên
  • 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


#43 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 08 December 2011 - 08:36 PM

(apply 'Function (list các biến)) = (function các biến). Số lượng biến nhiều hay ít không quan trọng, quan trọng là cái list thu về đăng sau chữ apply 'Draw nó có cùng số biến với hàm bạn viết thôi hay không.
Ngoài ra, chẳng ai giúp đc bạn nếu bạn không post thông báo lỗi lên


Lỗi thì đã post rồi: thiếu biến trong hàm. Và đương nhiên là thiếu ở hàm draw. Chiều nay có chat với bạn ấy nhưng chắc tôi không thể sửa nỗi, vì dialogle thì Ket viết (hơi khác với cách viết của tôi), với lại từ chỗ biết sơ sơ về lisp đến chỗ biết sơ sơ về DCL là 1 khoảng cách quá xa nên hơi khó để giúp.
@kedensau88: thật khó để giải thích cho bạn, vì bạn chưa hiểu hết cách dùng của 1 hàm, huống chi thêm thằng DCL. Lỗi đầu tiên của bạn là bạn định nghĩa 1 hàm (draw) có 12 biến nhưng bạn lại dùng nó với 4 biến là sai cú pháp, chưa kể 12 biến của bạn là từ trên trời rớt xuống.
Đừng giận nếu tôi làm bạn giận. Có như vậy mới mau hiểu lisp và tận dụng những ưu thế của nó trong công việc.
Thân thương!
  • 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.


#44 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 December 2011 - 09:07 PM

Ồ, xin lỗi OP và mọi người, ketxu đọc k rõ dòng bé bé ở cuối ^^
Thực ra khi thấy bạn kedensau tự viết được các hàm vẽ, ketxu đã rất mong bạn ấy trở thành 1 cây lisp tương lai. Khi post lisp + chat với kedensau e đều có nói là hãy ngâm cứu lại từng dòng trong mấy cái lisp từ đơn giản đến phức tạp - Trong Topic này - nếu có gì không hiểu thì hỏi - vì nó liên quan trực tiếp đến chính công việc của kedensau - và e k muốn bạn ấy quá bị động trong cách tư duy xử lý
Tuy nhiên khi không mò ra được vấn đề, bạn ấy lại chỉ cần "bây giờ em đang cần gấp chuơng trình này". Có lẽ do ketxu quá kỳ vọng và cải lương ^^

@kedensau : bạn cần biết cái Val thu được nó là cái gì sau khi đọc file dữ liệu đã. Cách kiểm tra mình có nói rồi
  • 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


#45 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 08 December 2011 - 11:31 PM

Em xin chân thành cảm ơn những ý kiến đóng góp của các anh.
Em mới học làm lisp,tài liệu nghiên cứu cũng sơ sài nên còn nhiều chỗ ko biết.Mong các anh thông cảm ạ.
Các anh cho em hỏi chỗ này tí.Ở cái hàm này:(apply 'draw (append val (list pt)))
là trả lại list các biến của hàm draw nhưng tại sao lại lấy list của pt nhỉ,theo như trong lisp thì pt chỉ là 1 điểm để bắt đầu từ đó vẽ mà.
Em hiểu như thế ko biết có đúng ko nữa,mong các anh giúp đỡ.
Em xin chân thành cảm ơn ạ.
P/s :các anh có tài liệu nào giải thích ý nghĩa của các hàm trên thì cho em tham khảo với ạ.
  • 0

#46 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 December 2011 - 08:31 AM

Chú không đọc bài #42 à ^^
Chỉ có đoạn này trả về 1 list : (append val (list pt))
Trong lisp trước thì hàm draw yêu cầu đối số cuối cùng là 1 điểm. Val thì trả về các đối số khác đằng trước
=> append val + pt = toàn bộ đối số cần thiết cho hàm draw.
pt là tọa độ 1 điểm, có dạng (x y z)
Hàm append có tác dụng nối 2 list, tuy nhiên nếu để nguyên thì kết quả thu về sẽ là (val x y z). Phải thêm list đằng trước để kết quả thu về là (val (x y z)), như vậy mới đúng yêu cầu của hàm
- Tất cả các hàm trên đều có trong Help
  • 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


#47 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 December 2011 - 05:01 PM

Anh xem giúp cho em chương trình này.Em vẫn giữ nguyên hàm của anh ketxu,em chỉ thay cái hàm tính ebows45 bằng 1 hàm khác có nhiều biến hơn là nó báo lỗi.


;Xu ly khi pick chon loai Elbowls
(action_tile "mylist"
"(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
)
(action_tile "accept" "(setq ret (list (get_tile \"mylist\")
(car (setq tmp
(cadr
(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))))
(last tmp)
))(done_dialog)")
ret
)

@kedensau : bạn cần biết cái Val thu được nó là cái gì sau khi đọc file dữ liệu đã. Cách kiểm tra mình có nói rồi

Nếu đọc mấy dòng trên thôi thì sẽ biết ngay vấn đề, nhưng gợi ý kedensau chưa để ý ra :)
Vì hàm đầu tiên chỉ có 2 đối số, nên ketxu đã ăn gian trí nhớ bằng cách lấy list
("loại" + giá trị đầu + giá trị cuối) của list giá trị (ở đây chính là biến tmp) để đề phòng file dữ liệu có nhiều hơn số biến mong đợi
Khi sử dụng với hàm yêu cầu nhiều đối số hơn và đã chuẩn số lượng cột, hãy ôm nguyên cả biến tmp vào giá trị trả về
Ví dụ :


(defun DCL ( lstType / fl ret dcl_id Return# add_lst )
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
(vl-load-com)
(setq fl (vl-filename-mktemp "mip" nil ".dcl"))
(setq ret (open fl "w"))
(mapcar
'(lambda (x) (write-line x ret))
(list
" mip_msg : dialog { label = \"Elbowls\";"
" : boxed_column { label = \"Chon loai Elbowls\";"
" : list_box { key = \"mylist\";width = 17;}"
" } "
" : boxed_column { label = \"Chon loai NPS\";"
" : popup_list {key = \"NPS\"; width = 17; height = 8;} "
" } "
" : row { "
" : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
" : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
" } "
"} "
)
)
(setq ret (close ret))
(if (and (not (minusp (setq dcl_id (load_dialog fl))))
(new_dialog "mip_msg" dcl_id)
)
(progn
(add_lst "mylist" '("Elbowls 45" "Elbowls 90" "Elbowls 180") 3)
(set_tile "mylist" "0")
(add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3) ;Chu y dong khoi tao lay du lieu Elbowls 45
;Xu ly khi pick chon loai Elbowls
(action_tile "mylist"
"(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
)
(action_tile "accept"
"(setq ret (cons (get_tile \"mylist\")
(cadr
(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))
)
)(done_dialog)")
(start_dialog)
)
)
(unload_dialog dcl_id)
(vl-file-delete fl)
ret
)

(defun c:fla (/ PR RL lst0 lst1 lst2 val pt lst)
;Lay ten file
(or fn0
(setq fn0 (findfile "Nhap ten file mac dinh vao day"))
(setq fn0 (getfiled "Chon file chua so lieu Class300 " "" "txt" 2)))
(or fn1
(setq fn1 (findfile "Nhap ten file mac dinh vao day"))
(setq fn1 (getfiled "Chon file chua so lieu Class400 " "" "txt" 2)))
(or fn2
(setq fn2 (findfile "Nhap ten file mac dinh vao day"))
(setq fn2 (getfiled "Chon file chua so lieu Class600 " "" "txt" 2)))
;Het lay ten file
(if (and fn0 fn1 fn2)
(progn
; Doc tung file dua vao list
(setq PR (open fn0 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst0 (append lst0 (list (list (car RL)(cdr RL))))
)
)
(setq lst0 (list "0" lst0))
(close PR)
; Doc file fn1 dua vao list
(setq PR (open fn1 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst1 (append lst1 (list (list (car RL)(cdr RL))))
)
)
(setq lst1 (list "1" lst1))
(close PR)
(setq PR (open fn2 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst2 (append lst2 (list (list (car RL)(cdr RL))))
)
)
(setq lst2 (list "2" lst2))
(close PR)
(setq lst (list lst0 lst1 lst2)) ;Lay list du lieu dang (("0" (NPS (OD B))(NPS (OD B))...)("1" (NPS (OD B))(NPS (OD B))...)...)
(if
(and (setq val (DCL lst))
(setq pt (getpoint "\nDiem chen:"))
)
(apply 'fla (append val (list pt)))
(princ "Loi")
)
);Het Progn
(princ "\nThieu file")
)
(princ)
)


;--------------------------------------------------------------------------------
(defun FLA(Loai D X G tsmall WT T1 A r1 C D1 p1 / OldOS)
(princ "\nYou are using copyright by Nguyen Thanh Luan-CPE-Doosan vina")
(setq
P2(polar P1 pi G)
P3(polar P2 (* pi 1.5) 6.35)
P4(polar P3 pi (/(- D G) 2))
P5(polar P4 (* pi 1.5) tsmall)
P6(polar P5 0.0 (/(- D X) 2))
P7 (list (+ (car P6) (/ (- X A) 2)) (- (cadr P6) (- T1 tsmall)) (caddr p6))
P8(polar P7 0.0 A)
P9(list (+ (car P8) (/ (- X A) 2)) (+ (cadr P8) (- T1 tsmall)) (caddr p8))
P10(polar P9 0.0 (/(- D X) 2))
P11(polar P10 (/ pi 2) tsmall)
P12(polar P11 pi (/(- D G) 2))
P13(polar P1 pi (/(- G (- A (* WT 2))) 2))
P14(polar P13 (* pi 1.5) (+ T1 6.35))
P15(polar P13 pi (- A (* WT 2)))
P16(polar P15 (* pi 1.5) (+ T1 6.35))
P17(polar P3 pi (/(- C G D1) 2))
P18(polar P17 (* pi 1.5) tsmall)
P19(polar P17 pi D1)
P20(polar P19 (* pi 1.5) tsmall)
P21(polar P12 0.0 (/(- C G D1) 2))
P22(polar P21 (* pi 1.5) tsmall)
P23(polar P21 0.0 D1)
P24(polar P23 (* pi 1.5) tsmall)
P25(list (- (car P24) (/ D1 2)) (- (cadr P24) 10) (caddr p24))
P26(polar P25 (* pi 0.5) (+ tsmall 20))
P27(list (- (car P8) (/ A 2)) (- (cadr P8) 15) (caddr p8))
P28(polar P27 (* pi 0.5) (+ T1 36.35))
P29(list (- (car P18) (/ D1 2)) (- (cadr P18) 10) (caddr p18))
P30(polar P29 (* pi 0.5) (+ tsmall 20))
)
(setq OldOs(getvar "osmode"))
(setvar "osmode" 0)
(COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
(command "line" P1 P2 P3 P4 P5 "")
(command "line" P5 P6 "")
(setq A1 (entlast))
(command "line" P6 P7 "")
(setq B1 (entlast))
(command "line" P7 P8 "")
(command "line" P8 P9 "")
(setq C1 (entlast))
(command "line" P9 P10 "")
(setq D1 (entlast))
(command "line" P10 P11 P12 p1 "")
(command "line" P13 P14"")
(command "line" P15 P16"")
(command "line" P17 P18"")
(command "line" P19 P20"")
(command "line" P21 P22"")
(command "line" P23 P24"")
(COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER2" "" "")
(command "line" P25 P26"")
(command "line" P27 P28"")
(command "line" P29 P30"")
(command "fillet" "r" r1 "" "fillet" A1 B1 )
(command "fillet" "" "fillet" C1 D1 )
(command "zoom" "w" P26 P29)
(setvar "osmode" OldOs)
(princ)
)


  • 1

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


#48 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 24 April 2012 - 11:27 AM

Chào các anh,em có một đoạn lisp thế này :

(defun DCL ( lstType / fl ret dcl_id Return# add_lst )
(defun add_lst (key lst method)
(start_list key method)
(mapcar 'add_list lst)
(end_list)
)
(vl-load-com)
(setq fl (vl-filename-mktemp "mip" nil ".dcl"))
(setq ret (open fl "w"))
(mapcar
'(lambda (x) (write-line x ret))
(list
" mip_msg : dialog { label = \"ANSI B16.5 FORGED FLANGES\";"
" : boxed_column { label = \"Select The Type Of Flanges\";"
" : list_box { key = \"mylist\";width = 20;}"
" } "
" : boxed_column { label = \"Select Nominal Pipe Size\";"
" : popup_list {key = \"NPS\"; width = 17; height = 8;} "
" } "
" : boxed_column { label = \"Select Wall Thickness\";"
" : edit_box {label = \"Wall Thichkness : t =\"; key = \"Tlon\"; edit_width = 8;}"
" } "
" : row { "
" : button {label = \"OK\"; key = \"accept\"; width = 10; fixed_width = true;} "
" : button {label = \"Cancel\"; is_cancel = true; key = \"cancel\"; width = 10; fixed_width = true;}"
" } "
"} "
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun Get_lwn1()
(setq Tlon (atof (get_tile "Tlon"))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq ret (close ret))
(if (and (not (minusp (setq dcl_id (load_dialog fl))))
(new_dialog "mip_msg" dcl_id)
)
(progn
(add_lst "mylist" '("CLASS 150 FLANGES UNDER 8 INCH" "CLASS 300 FLANGES UNDER 8 INCH" "CLASS 400 FLANGES UNDER 8 INCH" "CLASS 600 FLANGES UNDER 8 INCH" "CLASS 900 FLANGES UNDER 8 INCH" "CLASS 1500 FLANGES UNDER 8 INCH" "CLASS 150 FLANGES 10-24 INCH" "CLASS 300 FLANGES 10-24 INCH" "CLASS 400 FLANGES 10-24 INCH" "CLASS 600 FLANGES 10-24 INCH" "CLASS 900 FLANGES 10-24 INCH" "CLASS 1500 FLANGES 10-24 INCH") 3)
(set_tile "mylist" "0")
(add_lst "NPS" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadadr lst)) 3)
(action_tile "mylist"
"(add_lst \"NPS\" (mapcar '(lambda (x)(vl-princ-to-string (car x))) (cadr (assoc $value lst))) 3)"
)
(action_tile "accept"
"(setq ret (cons (get_tile \"mylist\")
(cadr
(nth (atoi (get_tile \"NPS\")) (cadr (assoc (get_tile \"mylist\") lst))))
)
)(Get_lwn1)(done_dialog)")
(start_dialog)
)
)
(unload_dialog dcl_id)
(vl-file-delete fl)
ret
)
(defun c:wn (/ PR RL lst0 lst1 lst2 lst3 lst4 lst5 lst40 lst41 lst42 lst43 lst44 lst45 val pt lst)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(or fn0
(setq fn0 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 150.txt"))
(setq fn0 (getfiled "Data Welding Neck Under 8 inch class 150" "" "txt" 2)))
(or fn1
(setq fn1 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 300.txt"))
(setq fn1 (getfiled "Data Welding Neck Under 8 inch class 300" "" "txt" 2)))
(or fn2
(setq fn2 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 400.txt"))
(setq fn2 (getfiled "Data Welding Neck Under 8 inch class 400" "" "txt" 2)))
(or fn3
(setq fn3 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 600.txt"))
(setq fn3 (getfiled "Data Welding Neck Under 8 inch class 600" "" "txt" 2)))
(or fn4
(setq fn4 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 900.txt"))
(setq fn4 (getfiled "Data Welding Neck Under 8 inch class 900" "" "txt" 2)))
(or fn5
(setq fn5 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 1500.txt"))
(setq fn5 (getfiled "Data Welding Neck Under 8 inch class 1500" "" "txt" 2)))
(or fn40
(setq fn40 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 150.txt"))
(setq fn40 (getfiled "Data Welding Neck Under 8 inch class 150" "" "txt" 2)))
(or fn41
(setq fn41 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 300.txt"))
(setq fn41 (getfiled "Data Welding Neck Under 8 inch class 300" "" "txt" 2)))
(or fn42
(setq fn42 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 400.txt"))
(setq fn42 (getfiled "Data Welding Neck Under 8 inch class 400" "" "txt" 2)))
(or fn43
(setq fn43 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 600.txt"))
(setq fn43 (getfiled "Data Welding Neck Under 8 inch class 600" "" "txt" 2)))
(or fn44
(setq fn44 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 900.txt"))
(setq fn44 (getfiled "Data Welding Neck Under 8 inch class 900" "" "txt" 2)))
(or fn45
(setq fn45 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck 10-24 inch class 1500.txt"))
(setq fn45 (getfiled "Data Welding Neck Under 8 inch class 1500" "" "txt" 2)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (and fn0 fn1 fn2 fn3 fn4 fn5 fn40 fn41 fn42 fn43 fn44 fn45)
(progn
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn0 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst0 (append lst0 (list (list (car RL)(cdr RL))))
)
)
(setq lst0 (list "0" lst0))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn1 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst1 (append lst1 (list (list (car RL)(cdr RL))))
)
)
(setq lst1 (list "1" lst1))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn2 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst2 (append lst2 (list (list (car RL)(cdr RL))))
)
)
(setq lst2 (list "2" lst2))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn3 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst3 (append lst3 (list (list (car RL)(cdr RL))))
)
)
(setq lst3 (list "3" lst3))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn4 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst4 (append lst4 (list (list (car RL)(cdr RL))))
)
)
(setq lst4 (list "4" lst4))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn5 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst5 (append lst5 (list (list (car RL)(cdr RL))))
)
)
(setq lst5 (list "5" lst5))
(close PR)
(setq PR (open fn40 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst40 (append lst40 (list (list (car RL)(cdr RL))))
)
)
(setq lst40 (list "6" lst40))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn41 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst41 (append lst41 (list (list (car RL)(cdr RL))))
)
)
(setq lst41 (list "7" lst41))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn42 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst42 (append lst42 (list (list (car RL)(cdr RL))))
)
)
(setq lst42 (list "8" lst42))
(close PR)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn43 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst43 (append lst43 (list (list (car RL)(cdr RL))))
)
)
(setq lst43 (list "9" lst43))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn44 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst44 (append lst44 (list (list (car RL)(cdr RL))))
)
)
(setq lst44 (list "10" lst44))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq PR (open fn45 "r") RL (read-line PR))
(while (setq RL (read-line PR))
(setq RL (read (strcat "(" RL ")"))
lst45 (append lst45 (list (list (car RL)(cdr RL))))
)
)
(setq lst45 (list "11" lst45))
(close PR)
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq lst (list lst0 lst1 lst2 lst3 lst4 lst5 lst40 lst41 lst42 lst43 lst44 lst45))
(if
(and (setq val (DCL lst))
(setq pt (getpoint "\nStart Point:"))
)
(apply 'wna (append val (list pt)))
(princ "Error")
)
)
(princ "\nMissing File")
)
(princ)
)
;--------------------------------------------------------------------------------
(defun wna (Loai D X G tnho T1 A C D1 p1 / OldOS)
(setq OldOs(getvar "osmode"))
(setvar "osmode" 0)
(setq
P2(polar P1 0.0 (/ G 2))
P3(polar P2 (/ pi 2) 1.6)
P4(polar P3 0.0 (/ (- D G) 2))
P5(polar P4 (/ pi 2) tnho)
P6(polar P5 pi (/ (- D X) 2))
P7(polar P1 (/ pi 2) (+ T1 1.6))
P8(polar P7 0.0 (/ A 2))
P9(polar P8 (* pi 1.5) 6)
P10(polar P8 pi Tlon)
P11(polar P10 (* pi 1.5) (+ T1 1.6))
P12(polar P3 0.0 (/ (- C G) 2))
P13(polar P12 pi (/ D1 2))
P14(polar P13 (/ pi 2) tnho)
P15(polar P12 0.0 (/ D1 2))
P16(polar P15 (/ pi 2) tnho)
P17(polar P1 (* pi 1.5) (/ T1 8))
P18(polar P7 (/ pi 2) (/ T1 8))
P19(polar P12 (* pi 1.5) (/ tnho 8))
P20(polar P12 (/ pi 2) (+ tnho (/ tnho 8)))
P21(polar P1 0.0 (/ D 2))
P22(polar P7 pi (/ D 2))
)
(COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
(command "line" P1 P2 P3 P4 P5 P6 P9 P8 P7 "")
(command "line" P10 P11 "")
(command "line" P13 P14 "")
(command "line" P15 P16 "")
(COMMAND "LAYER" "M" "1" "C" "1" "" "L" "CENTER2" "" "")
(command "line" P17 P18 "")
(command "line" P19 P20 "")
(COMMAND "LAYER" "M" "3" "C" "3" "" "L" "CONTINUOUS" "" "")
(command "zoom" "a" "")
(command "zoom" "w" P21 P22)
(COMMAND "MIRROR" "BOX" P21 P7 "" P1 P7 "" )
(setvar "osmode" OldOs)
(princ)
)

Nếu viết như thế này thì em thấy cách lấy file dữ liệu có vẻ dài quá,có cách nào để làm ngắn gọn lại không vậy các anh ??

Thanks !!!!

- Đọc code lisp có lẽ phần đầu là ketxu viết. Phần lấy dữ liệu bạn biến báo đi, tuy nhiên áp dụng 1 cách quá máy móc. Trước đây code chỉ yêu cầu 2 file nên ketxu k viết hàm con. Nay bạn cần đến 7 8 cái lận. Thế nếu 100 cái thì code của bạn trông ra sao ?Hãy nhớ tất cả các thao tác có thể lặp đi lặp lại nhiều lần thì nên được cho vào hàm con, tất cả các biến lúc này sẽ biến thành đối số. Trong code của bạn đoạn này :
Trích dẫn

(or fn0 (setq fn0 (findfile "C:\\Program Files\\Autodesk\\ACADM 2010\\flanges\\Data\\Welding Neck Under 8 inch class 150.txt")) (setq fn0 (getfiled "Data Welding Neck Under 8 inch class 150" "" "txt" 2)))
;......
(setq PR (open fn0 "r") RL (read-line PR)) (while (setq RL (read-line PR)) (setq RL (read (strcat "(" RL ")")) lst0 (append lst0 (list (list (car RL)(cdr RL)))) ))(setq lst0 (list "11" lst0))(close PR)

của bạn lặp đi lặp lại quá nhiều. Hãy viết lại thành 1 hàm con với đối số fn và string "11". Hàm trả về lst0
Phần này để dành cho bạn


Vâng,đúng là đoạn Lisp này em có nhờ anh viết.
Nhưng cái đoạn anh nói ở trên em vẫn ko hiểu rõ lắm cách viết lại thành 1 hàm con đó. :wacko: :wacko:
Các anh Pro giúp em với !!!!
  • 0