Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

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

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

Dựa vào Code của a snowman.hms ,em chế lại cũng đúng với trường hợp của em rồi ạ

Em cũng tham khảo trong express Tool rồi nhưng khó hiểu quá nên mới nhờ anh chị Cadviet^^

Cảm ơn a snowman.hms và a Tue_NV nhiều!

Like like ^^

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

Bạn có thể sử dụng thêm cái này. Nó không "nháy nháy" ở command; zoom không bị mất vùng chọn.

 

; Chon doi tuong theo tung vung, co danh dau tung vung da chon. Zoom khong bi mat vung.
(defun C:HA ( / n ss p1 p2 lst flag)
 (setq ss (ssadd))
 (setvar "highlight" 1)
 (command "_.select")
 (while (not flag)
  (setq p1 (getpoint "\nSpecify first point: "))
  (cond
   ((and p1
     (equal (type p1) 'LIST)
     (progn (initget 33) (setq p2 (getcorner p1 "\nSpecify other corner: "))))
    (setq lst (append lst (list (list p1 p2))))
(setq ss (ssadd (LWPoly (list p1 (list (car p2) (cadr p1)) p2 (list (car p1) (cadr p2))) 1 6) ss))
(command "c" p1 p2))
  ((or (= p1 "") (not p1))
   (setq flag T))))
 (command "")
 (command "erase" ss "")
 (sssetfirst nil (setq ss (ss_union (mapcar '(lambda (x) (ssget "C" (car x) (cadr x))) lst))))
 (setvar "highlight" 0)
 ss)
(defun ss_union (lst / i ss)
 (setq ss (car lst))
 (foreach x (cdr lst)
  (repeat (setq i (sslength x))
   (ssadd (ssname x (setq i (1- i))) ss)))
 ss) 
(defun LWPoly (lst cls col)
 (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 62 6) (cons 90 (length lst)) (cons 70 cls))
   (mapcar (function (lambda (p) (cons 10 p))) lst))))
  • Vote tăng 1

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

Đoạn Code a Hạ chay xong đối tượng vẫn ở dạng highlight a (đối tượng chon ở dạng nét đứt) ,a Hạ chỉ giúp em Làm thể nào để huỷ chế độ này với.

Còn đoạn Code của a snowman.hms  thì có cách nào khắc phục cái "nháy nháy " đó ko a

Em cảm ơn!

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

Thuật toán & code có rồi, code của Doan Van Ha thêm 1 lệnh, code của snowman.hms chỉ cần thêm 1 biến phụ rồi đưa vào if là được.

Phần chính & khó nhất đã xong, bạn phải tự nghiên cứu để làm phần còn lại,

Nếu không thì chỉ có:

Xin, xin nữa, xin mã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

Thuật toán & code có rồi, code của Doan Van Ha thêm 1 lệnh, code của snowman.hms chỉ cần thêm 1 biến phụ rồi đưa vào if là được.

Phần chính & khó nhất đã xong, bạn phải tự nghiên cứu để làm phần còn lại,

Nếu không thì chỉ có:

Xin, xin nữa, xin mãi !!!!!

Cảm ơn bạn đã góp ý !!

Mình toàn học mót Lisp trên cadviet nên trình độ còn kém,những cái tự viết được thì mình đã làm,nhưng những cái khó quá mình mới nhờ anh em code giúp thôi

Thật ra ,2 lisp trên cũng gần đúng ý mình,nên mình mót và chế lại theo đúng ý mình rồi

Do đang thử code a Hạ thì mình bị như vậy mà mình xử lý không được nên mới đành post bài nhờ anh em chỉ bảo  thêm

Đoạn xanh mong bạn giải thích rõ thêm tí được ko,do hàm grread mình chưa rõ lắm nên sửa mãi mà chưa được (mục đích của mình thì chỉ khi mình pick chon điểm để quét vùng nó mới nhảy dòng Princ ,chứ ko muốn nhảy liên tục như code của a snowman.hms )

Hơi tham lam tí nên anh chị thông cảm.Hi

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

Cảm ơn bạn đã góp ý !!

Mình toàn học mót Lisp trên cadviet nên trình độ còn kém,những cái tự viết được thì mình đã làm,nhưng những cái khó quá mình mới nhờ anh em code giúp thôi

Thật ra ,2 lisp trên cũng gần đúng ý mình,nên mình mót và chế lại theo đúng ý mình rồi

Do đang thử code a Hạ thì mình bị như vậy mà mình xử lý không được nên mới đành post bài nhờ anh em chỉ bảo  thêm

Đoạn xanh mong bạn giải thích rõ thêm tí được ko,do hàm grread mình chưa rõ lắm nên sửa mãi mà chưa được (mục đích của mình thì chỉ khi mình pick chon điểm để quét vùng nó mới nhảy dòng Princ ,chứ ko muốn nhảy liên tục như code của a snowman.hms )

Hơi tham lam tí nên anh chị thông cảm.Hi

 

Chỉ cần hoán đổi vị trí code trong li sp của bạn snowman là được

Và mình có chỉnh 1 tí để có thể sử dụng lệnh như 1 transparent command

 

(defun c:test ( / gr_rec gr gr1 gr2 p1 p2 tm lst s)
  (defun gr_rec (p1 p2 / l)
    (mapcar '(lambda (a b) (grdraw a b 6 1))
   (setq l (list p1 (list (car p1) (cadr p2))
 p2 (list (car p2) (cadr p1))))
   (cons (last l) l)))
  (princ (strcat "\nSpecify the First point ..."
    "\nPress [SPACE/ENTER] to EXIT"
    )
      )
  (while
    (progn
      (setq gr1 (grread t 15 0)
   gr2 (cadr gr1)
   gr1 (car gr1)
      )
      
      (cond
((= 5 gr1)
(redraw)
(if lst (mapcar '(lambda (x) (gr_rec (car x) (cadr x))) lst) t)
)
((= 3 gr1)
(princ "\nSpecify the Second point ...")
(setq p1 gr2)
(while
  (progn
    (setq gr1 (grread t 15 0)
  gr2 (cadr gr1)
  gr1 (car gr1)
    )
    
    (cond
      ((= 5 gr1)
(redraw)
(if lst (mapcar '(lambda (x) (gr_rec (car x) (cadr x))) lst) t)
(setq tm gr2)
(gr_rec p1 tm)
      )
      ((= 3 gr1)
 (princ (strcat "\nSpecify the First point ..."
    "\nPress [SPACE/ENTER] to EXIT"
    )
      )
(setq p2 gr2)
(setq lst (cons (list p1 p2) lst))
nil
      )
    )
  )
)
t
)
((and (= 2 gr1) (member gr2 '(13 32))) nil)
(t)
      )
    )
  )
  (if lst
    (progn
      (setq s (ss_union (mapcar '(lambda (x) (ssget "_C" (car x) (cadr x))) lst)))
      (redraw)
      (sssetfirst nil s)
    )
  )
s
)
(defun ss_union (lst / i s)
  (setq lst (vl-sort lst '(lambda (a b) (> (sslength a) (sslength b))))
s   (car lst)
  )
  (foreach x (cdr lst)
    (repeat (setq i (sslength x))
      (ssadd (ssname x (setq i (1- i))) s)
    )
  )
  s
) 
  • Vote tăng 1

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

Thanks Tue_NV!

 

another way (without using grread)  :D

(defun foo (/ doc fl p1 p2 l l1 l2 l3 rtn  *error* _LwPoly ss->ent)

  (defun *error* (msg)
    (and l1 (mapcar 'entdel l1))
    (and doc (vla-regen doc acActiveViewport) (vla-endundomark doc))    
    (if	(and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
      (princ (strcat "\nError: " msg))
    )
  )
  
  (defun _LwPoly (p1 p2 / e)
    (setq e (entmakex
	      (append
		(list (cons 0 "LWPOLYLINE")
		      (cons 100 "AcDbEntity")
		      (cons 100 "AcDbPolyline")
		      (cons 90 5)
		      (cons 62 6)
		      (cons 70 0)		      
		)
		(mapcar	(function (lambda (p) (cons 10 p)))
			(list p1
			      (list (car p1) (cadr p2))
			      p2
			      (list (car p2) (cadr p1))
			      p1
			)
		)
	      )
	    )
    )
    (redraw e 3)
    e
  )

  (defun ss->ent (ss / i l)
    (if	ss
      (repeat (setq i (sslength ss))
	(setq l (cons (ssname ss (setq i (1- i))) l))
      )
    )
  )

  ;;---------------------------------------------------------------;;

  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-regen doc acActiveViewport)
  (vla-startundomark doc)

  (while (not fl)
    (initget "Undo" 128)
    (setq p1
	   (getpoint
	     "\nPress [SPACE/ENTER] to Exit or [Undo]  <Specify the First corner> :  "
	   )
    )
    (cond
      ((null p1)
       (and l1 (mapcar 'entdel l1) (setq l1 nil))
       (setq fl t)
      )

      ((equal p1 "Undo")
       (if (and l l1)
	 (progn
	   (entdel (car l1))	   
	   (setq l3 (car l)
		 l  (cdr l)
		 l1 (cdr l1)
		 l3 (vl-remove-if '(lambda (x) (member x l1)) (ss->ent (ssget "_C" (car l3) (cadr l3))))
	   )
	   (if l3
	     (progn (setq l2 (cdr l2))
		    (mapcar '(lambda (x) (redraw x 4)) l3)
		    (mapcar '(lambda (x) (redraw x 3)) (apply 'append l2))
	     )
	   )	   
	 )
	 (princ "\nNothing to Undo!")
       )
      )

      ((listp p1)
       (if (setq p2 (getcorner p1 "\nSpecify the Next corner.."))
	 (progn
	   (if (setq l3 (vl-remove-if '(lambda (x) (member x l1)) (ss->ent (ssget "_C" p1 p2))))
	     (progn
	       (setq l2 (cons l3 l2))
	       (mapcar '(lambda (x) (redraw x 3)) l3)
	     )
	   )
	   (setq l  (cons (list p1 p2) l)
		 l1 (cons (_LwPoly p1 p2) l1)
	   )	   
	 )
	 (princ "\nInvalid. Try again.")
       )
      )

      (t
       (princ "\nInvalid. Try again.")
      )
    )
  )
  
  (vla-endundomark doc)  
  
  (foreach x (apply 'append l2) (if (not (member x rtn)) (setq rtn (cons x rtn))))
  rtn
)
;|«Visual LISP© Format Options»
(70 2 1 2 nil "_eof " 100 9 0 0 1 T T T T)
;*** DO NOT add text below the comment! ***|;

  • Vote tăng 2

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

Cảm ơn bạn đã góp ý !!

Mình toàn học mót Lisp trên cadviet nên trình độ còn kém,những cái tự viết được thì mình đã làm,nhưng những cái khó quá mình mới nhờ anh em code giúp thôi

Thật ra ,2 lisp trên cũng gần đúng ý mình,nên mình mót và chế lại theo đúng ý mình rồi

Do đang thử code a Hạ thì mình bị như vậy mà mình xử lý không được nên mới đành post bài nhờ anh em chỉ bảo  thêm

Đoạn xanh mong bạn giải thích rõ thêm tí được ko,do hàm grread mình chưa rõ lắm nên sửa mãi mà chưa được (mục đích của mình thì chỉ khi mình pick chon điểm để quét vùng nó mới nhảy dòng Princ ,chứ ko muốn nhảy liên tục như code của a snowman.hms )

Hơi tham lam tí nên anh chị thông cảm.Hi

Tôi đã gợi ý, có thể sửa theo cách hoán đổi vị trí như của Tue_NV bạn chưa làm được, nhưng với khi dùng code cũ,

bấm F2 bạn sẽ thấy lệnh

(princ ...)  thực hiện liên tục 1 câu như nhau liên tục.

Như vậy chỉ cần thêm 1 biến phụ lưu tình trạng khi (princ ...), nếu tình trạng thay đổi thì (princ ...) và lưu tình trạng mới, nếu tình trạng như cũ thì bỏ qua.

Nếu bạn nghĩ rằng dùng code của Tue_NV ổn rồi mà không tự viết theo gợi ý trên thì khó mà tiến bộ được.

 

PS: code của snowman của bài trên không dùng được vì các đối tượng thì highlight nhưng lại không được select, nếu chọn previous thì chỉ chọn được các đối tượng ở cửa sổ sau cùng chứ không phải tất cả các đối tượng highlight

  • Vote tăng 1

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

 

PS: code của snowman của bài trên không dùng được vì các đối tượng thì highlight nhưng lại không được select, nếu chọn previous thì chỉ chọn được các đối tượng ở cửa sổ sau cùng chứ không phải tất cả các đối tượng highlight

 

Mình không thật sự hiểu ý của bạn.

1. Dùng được hay không thì tùy vào mục đích.

2. Các đối tượng highlight (sau khi thực hiện hàm foo), bao gồm 2 tập: các đối tượng sẵn có trong bản vẽ được chọn, và các đối tượng rectangle tạo mới (tự động bị xóa sau khi kết thúc hàm). Select của bạn có nghĩa là gì? là được đưa vào một Selection set? nếu vậy thì bạn đúng, nhưng mục đích của mình là trả về List chứ không phải Selection set

4. chọn previous là sao? code của mình chỉ có Undo tức là bỏ chọn cái vùng chọn sau cùng (nếu có) thôi.

 

Thanks anti lazy for your reply :)

  • Vote tăng 1

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

Thanks các anh chị nhiều !

Lisp nào cũng có cái hay riêng của nó,do đang học nên cũng tò mó phá tí để học hỏi thêm ^^

Anh Doan Van Ha :Code của anh thì em đã dùng và thấy khá hay ,code lại  dễ hiểu nên ổn rồi anh ( Like ^^)

Anh  Tue_NV : Code a đã hết "nháy nháy" rồi ạ ^^  ( Like ^^)

Anh snowman.hms : Code sau ni hay thiệt ^^ mỗi lần quét nó sẽ highlight luôn chứ không giống code trước ( Like ^^)

Ở code đầu tiên của a snowman.hms  thì em chỉ cần sữa như vầy + với a anti lazy hướng dẫn là đúng mục đích của e rồi .Hi

(if lst
(progn
(setq
listpoint (mapcar
'(lambda (x)
(acet-ss-to-list
(ssget "_C" (car x) (cadr x) '((0 . "CIRCLE") (62 . 1)))
)
)
(reverse lst)
)
)
)
)

 

Chúc mọi người buổi sang zui zẻ nhé!

  • Vote tăng 1

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

Mình không thật sự hiểu ý của bạn.

1. Dùng được hay không thì tùy vào mục đích.

2. Các đối tượng highlight (sau khi thực hiện hàm foo), bao gồm 2 tập: các đối tượng sẵn có trong bản vẽ được chọn, và các đối tượng rectangle tạo mới (tự động bị xóa sau khi kết thúc hàm). Select của bạn có nghĩa là gì? là được đưa vào một Selection set? nếu vậy thì bạn đúng, nhưng mục đích của mình là trả về List chứ không phải Selection set

4. chọn previous là sao? code của mình chỉ có Undo tức là bỏ chọn cái vùng chọn sau cùng (nếu có) thôi.

 

Thanks anti lazy for your reply :)

Vì bạn không chú thích nên tôi cũng dùng nó như lisp đầu là dùng lệnh để select rồi dùng command, bây giờ bạn nói mới để ý. Đã thank

Lisp sau có ưu điểm là highlight nhưng lại tạo và xóa các hcn

Tất cả các lisp đều bất tiện là không unselect được

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

Phải chăng unselect  của bạn là bỏ chọn "cửa sổ" gần nhất?

Bạn thử nhập "u" hoặc Ctrl+Z trong quá trình nhập?

"\nPress [SPACE/ENTER] to Exit or [Undo]  <Specify the First corner> :  "

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

 

Em có cấu trúc file được lặp đi lặp lại nhiều lần

COC C1
P 4.966 3.277
P 11.632 7.723
P 17.779 4.347
T 9.231 6.644
T 20.103 1.069
COC C2
P 4.855 8.792
P 12.383 2.158
P 21.547 6.564
T 15.522 8.782
T 21.191 4.376
COC C3
P 2.656 1.109
P 13.758 9.941
P 21.266 3.277
T 6.088 1.03
T 11.869 6.624
T 21.094 3.277
COC C4
P 5.864 4.376
P 11.069 2.158
P 18.156 7.693
T 5.565 3.307
T 13.337 6.594
COC C5
P 5.21 6.644
P 12.117 9.98
T 8.076 7.663
T 13.858 3.267
T 20.558 8.772

Em hơi tơ lơ mơ về cách đọc file theo dấu hiệu nhận biết. Các bác chỉ dùm em chút được không ạ!

Em muốn lấy thông tin từ file đó ra và cho nó vào 1 danh sách như

((C1 (P 4.966 3.277)(P 11.632 7.723)(P 17.779 4.347)(T 9.231 6.644)(T 20.103 1.069))(C2 (P 4.855 8.792)(P 12.383 2.158)(P 21.547 6.564)(T 15.522 8.782)(T 21.191 4.376).....)

 

Em đã viết như này rồi, các bác xem chỉ cho em cách thức được không ạ?

(defun replace_str (str)
  (setq	rs (acet-str-replace "," " " str)
	rs (acet-str-replace "	" " " rs)
  )
  (split_space rs)
)
(defun split_space (str)
  (vl-remove-if
    '(lambda (x) (= x ""))
    (acet-str-to-list " " str)
  )
)



(defun c:00 (/	)

(if (setq ten (getfiled "Select File" (getvar "dwgprefix") "*" 8))
    (progn
      (setq f (open (findfile ten) "r"))
      (while
	(setq Line (read-line f))
	 (if
	   (wcmatch Line
		    (strcat "*" (chr 9) "*,*" (chr 32) "*,*" (chr 44) "*")
	   )
	    (progn
	      (setq data (replace_str Line))
	      (setq Ds1COC (list))
	      (setq Ds_nCOC (list))
	      (if
		(and (= (length data) 2) (= (strcase (nth 0 data)) "COC"))
		 (progn
		   (setq Ds1COC (list (nth 1 data)))
		   (setq Ds1COC_ (list))
		   (setq Line2 (read-line f))
		      (if (wcmatch Line2
				   (strcat "*"
					   (chr 9)
					   "*,*"
					   (chr 32)
					   "*,*"
					   (chr 44)
					   "*"
				   )
			  )
			(Progn
			  (setq dataCOC (replace_str Line2))
			  (if
			    (= (length dataCOC) 3)
			     (progn
			       (setq Ds1COC_ (list (nth 0 dataCOC)
						   (nth 1 dataCOC)
						   (nth 2 dataCOC)
					     )
			       )
			       (setq Ds1COC (append Ds1COC (list Ds1COC_)))
			       
			     )
			  )
			)
		      )
		   (setq Ds_nCOC (append Ds_nCOC (list Ds1COC)))
		 )
	      )
	    )
	 )
      )
      
    )
  )
  (princ)
)

Em cảm ơn các bác!

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

Mong các bác chỉ dẫn dùm ạ! Em chỉ cần phương thức thôi ạ. 

Bài toán của em không quá khó, nhưng hôm nay bận quá. Nếu sáng mai chưa ai giúp thì anh sẽ giúp. Gắng đợi 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

Rảnh được tí, code cho em đây. Hóa ra nó không dễ như lầm tưởng ban đầu.

Hàm này ứng dụng thực tế là khá nhiều đấy!

 

(defun c:00 (/ ten f lst i it tLst rt)
 (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8))
  (progn
   (setq f (open (findfile ten) "r"))
   (while (setq Line (read-line f))
    (setq lst (cons Line lst)))))
 (setq i -1)
 (while (setq it (nth (setq i (1+ i)) (reverse lst)))
  (if (not (wcmatch it "COC*"))
   (setq tLst (append tLst (list it)))
   (setq rt (append rt (list tLst))
         tLst (list it))))
 (mapcar '(lambda(x) (append (list (vl-string-right-trim "\t" (substr (car x) 5)))
    (mapcar '(lambda(y) (read (strcat "(" y ")"))) (cdr x)))) (cdr (append rt (list tLst)))))
  • Vote tăng 2

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

Dạ. Em cũng đang về quê. Chắc mấy hnay mới lên. Em cảm ơn bác nhiều. Lần nào bác cũng là người giúp em.

Hề hề hề, 

Mình viết bậy cái này, thanhduan2407 thử coi có đúng ý bạn không nhé. Nếu đúng thì thanhduan2407 hoàn tất nốt các việc phụ như bẫy lỗi khử biến chi chi đó. Mình chưa làm mấy việc này.

 

(defun c:t2l ()
(setq  fn (getfiled "Select Data File" "" "txt" 0)
            f (open fn "r")
            txtl nil
           ls1 nil
           ls2 nil
           ls3 nil
)
(while (/= (setq txt (read-line f)) nil)
    (setq txt (separate txt "\t"))
    (setq txtl (append txtl (list txt)))
)
(foreach sl txtl
    (if (= (car sl) (read "COC"))
        (progn
           (setq sh (cadr sl)
                     tt (vl-position sl txtl)
                     ls1 (append ls1(list (list sh tt)))
                   ;;  ls2 (append ls2 (list ls1))
           )
        )
     )
)
(setq n (length ls1) i 0)
(while (<= i (- n 1))  
      (setq sc (car (nth i ls1))
                k (cadr (nth i ls1))
                m (if (< i (1- n))  (cadr (nth (1+ i) ls1)) (length txtl))
                ls2 (list sc)
      ) 
      (while (< (1+ k) m)
             (setq ls2 (append ls2 (list (nth (1+ k) txtl))))
             (setq k (1+ k))
      )
      (setq ls3 (append ls3 (list ls2)))
      (setq i (1+ i))
)
                
      
 
)
;;;;;;;;;;;;;;;;;;;;;;
(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 (read (substr S 1 (- i 1)))))
     S (substr S (1+ i) (- (strlen S) i))
     i 0
)
      )) 
)
(append L (list (read S)))
)
 
  • Vote tăng 2

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

Cảm ơn bác @Doan Van Ha và bác @Phamthanhbinh: Em luôn theo dõi bài viết nhưng hiện tại em đang ở quê

, ko mang máy tính nên chưa check đc. Em cảm ơn các bác nhiều lắm

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

Sợ rằng mai kia mốt nọ mình không hiểu mình đã viết những gì, nên gắng sửa lại cho tường minh hơn tí, ai muốn dùng cũng dễ áp dụng hơn tí.

 

(defun c:00 (/ ten f lst line)
 (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8))
  (progn
   (setq f (open (findfile ten) "r"))
   (while (setq Line (read-line f))
    (setq lst (cons Line lst)))))
 (Sap_xep lst "COC"))
(defun Sap_xep(lst group / i line lst1 lst2 lst3) 
 (setq i -1)
 (while (setq line (nth (setq i (1+ i)) (reverse lst)))
  (if (not (vl-string-search group line))
   (setq lst1 (append lst1 (list line)))
   (setq lst2 (append lst2 (list lst1))
         lst1 (list line))))
 (setq lst3 (cdr (append lst2 (list lst1))))
 (mapcar '(lambda(x) (append (list (vl-string-right-trim "\t" (substr (car x) (+ (strlen group) 2)))) (mapcar '(lambda(y) (Ptr->L y)) (cdr x)))) lst3))
(defun Ptr->L(ptr)
 (read (strcat "(" ptr ")")))
  • Vote tăng 2

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

Cảm ơn bác @Doan Van Ha và bác @Phamthanhbinh: Em luôn theo dõi bài viết nhưng hiện tại em đang ở quê

, ko mang máy tính nên chưa check đc. Em cảm ơn các bác nhiều lắm

Hề hề hề, 

Thanduan2407 lưu ý rằng mình quên chưa đóng file txt đã mở. Vậy Thanduan2407 bổ sung thêm hàm (close f) cho mình nhé.

  • Vote tăng 1

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

×