Đến nội dung


Hình ảnh
- - - - -

Lisp điền cao độ bị lỗi!!!


  • Please log in to reply
68 replies to this topic

#21 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 December 2012 - 11:00 AM

Thanhk bác Bình nhiều, mình sẽ rút kinh nghiệm. Nhưng mình không nghĩ" Diễn đàn là nơi.. như bác nói". Vì mình thấy diễn đàn hay và bổ ích lại có mục viết lisp theo yêu cầu. Nên mình mới dám nhờ các bác, nói thật nhờ mà các bác đã giúp như thế thì cũng tốt lắm rồi, còn mong cái hoàn thiện hơn thì ai chả muốn phải không bác? Chúc các bác Năm mới sức khỏe và thành công. Có cách nào để có dịp thank trực tiếp các bác không nhỉ?

Hề hề hề,>
Cảm ơn bạn đã biết tiếp thu ý kiến đóng góp của mọi người

Về yêu cầu bổ sung của bạn, bạn có thể tự làm lấy được bằng cách như sau:

1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil)) vào ngay phía trên đoạn code:

(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))

2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )

Bạn cần lưu ý rằng sau khi sửa như vầy thì trong một phiên làm việc nếu bạn muốn thay đổi các giá trị cao độ h, tx, ty thì bạn phải set các biến h1, tx1, ty1 về nil trước khi chạy lisp.

Còn về cái yêu cầu giống, có nhẽ bạn muốn nói tới cái dấu + trước các con số về cao độ trong bảng Excel. Điều này là do Excel mặc định hiểu các text này là các con số chứ không phải text. Bạn có thể sửa lại trong excel bằng hàm concatenate dễ dàng mà. Lisp không can thiệp vào cái sự hiểu ấy được.
Chúc bạn vui và lưu ý các quy định khi tham gia diễn đàn.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#22 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 31 December 2012 - 01:58 PM

Hề hề hề,>
Cảm ơn bạn đã biết tiếp thu ý kiến đóng góp của mọi người

Về yêu cầu bổ sung của bạn, bạn có thể tự làm lấy được bằng cách như sau:

1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil)) vào ngay phía trên đoạn code:

(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))

2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )

Bạn cần lưu ý rằng sau khi sửa như vầy thì trong một phiên làm việc nếu bạn muốn thay đổi các giá trị cao độ h, tx, ty thì bạn phải set các biến h1, tx1, ty1 về nil trước khi chạy lisp.

Còn về cái yêu cầu giống, có nhẽ bạn muốn nói tới cái dấu + trước các con số về cao độ trong bảng Excel. Điều này là do Excel mặc định hiểu các text này là các con số chứ không phải text. Bạn có thể sửa lại trong excel bằng hàm concatenate dễ dàng mà. Lisp không can thiệp vào cái sự hiểu ấy được.
Chúc bạn vui và lưu ý các quy định khi tham gia diễn đàn.

Qủa thực không biết nói thế nào để cảm ơn Bác Bình! Các Bác thật thấu tình đạt lý, không những viết giúp mà còn chỉ giáo rất tận tình.
Còn vấn đề về file cel, khi xuất ra nó không sai, nhưng các số trong 1 hàng khi vào cel nó nằm trong cùng 1 ô, như vậy rất bất tiện. Với lại cứ mỗi lần lấy cao độ khoảng cách ở trắc ngang khác thì nó lại xuất ra 1 file cel riêng. Nếu như nó lưu vào cùng 1 file cel thì hay biết mấy. " Cái này tại cá bệnh đam mê cái hoàn hảo nên mình mới nói vậy" . Nếu có gì không phải bác bỏ qua giùm nhé! Dám hỏi Bác Bình, Bác đang công tác ở đâu vậy? Cảm ơn các Bác nhiều, chúc các Bác sức khỏe!
  • 0

#23 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 December 2012 - 04:51 PM

Qủa thực không biết nói thế nào để cảm ơn Bác Bình! Các Bác thật thấu tình đạt lý, không những viết giúp mà còn chỉ giáo rất tận tình.
Còn vấn đề về file cel, khi xuất ra nó không sai, nhưng các số trong 1 hàng khi vào cel nó nằm trong cùng 1 ô, như vậy rất bất tiện. Với lại cứ mỗi lần lấy cao độ khoảng cách ở trắc ngang khác thì nó lại xuất ra 1 file cel riêng. Nếu như nó lưu vào cùng 1 file cel thì hay biết mấy. " Cái này tại cá bệnh đam mê cái hoàn hảo nên mình mới nói vậy" . Nếu có gì không phải bác bỏ qua giùm nhé! Dám hỏi Bác Bình, Bác đang công tác ở đâu vậy? Cảm ơn các Bác nhiều, chúc các Bác sức khỏe!

Hề hề hề,
Điều bạn nói về file xuất ra mình chưa hiểu. Thực tế mình xuất ra file cvs thì mỗi số liệu nằm vào một ô chứ dâu có chuyện tất cả các số liệu của một điểm đ62u nằm trong một cell đâu. bạn hãy gửi file kết quả bạn làm lên để mình kiểm tra.
Việc muốn các dữ liệu đều xuất vào một file thì cũng đơn giản, bạn chỉ cần thay tham só "w" trong dòng code : (setq f (open fn "w")) bằng tham số "a" tức là :
(setq f (open fn "a")) là được.
Tuy nhiên như vậy mỗi lần chạy lisp các số liệu sẽ cách nhau bởi một dòng tiêu đề các cột. Nhờ vậy bạn có thể kiểm soat được số liệu sau mỗi lần chạy lisp.
Chúc bạn vui.
PS: Nếu bạn cần mình sẽ gửi bạn xem một file kết quả mình đã test trên file bạn gửi.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 31 December 2012 - 04:59 PM

Hề hề hề,
Điều bạn nói về file xuất ra mình chưa hiểu. Thực tế mình xuất ra file cvs thì mỗi số liệu nằm vào một ô chứ dâu có chuyện tất cả các số liệu của một điểm đ62u nằm trong một cell đâu. bạn hãy gửi file kết quả bạn làm lên để mình kiểm tra.

Lỗi dồn số liệu các cell cùng hàng vào chung 1 cell là có thực bác ạ! Lý do: định dạng số thập phân là dấu phẩy. Khi đó, các số liệu cách nhau bởi 1 dấu phẩy và nằm trong cùng cell, kiểu thế này "100,200,300,...". Cách khắc phục: chuyển định dạng sang dấu chấm, hoặc xuất ra xls luôn.
  • 2

* 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.


#25 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 01 January 2013 - 08:44 AM

Sao mình làm như Bác Bình nói rồi : 1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil))

vào ngay phía trên đoạn code:
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )
Việc muốn các dữ liệu đều xuất vào một file thì cũng đơn giản, bạn chỉ cần thay tham só "w" trong dòng code : (setq f (open fn "w")) bằng tham số "a" tức là :
(setq f (open fn "a")) là được.
mà không được, Chắc tại tớ gà quá! hịc
  • 0

#26 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 02 January 2013 - 09:55 AM

Sao mình làm như Bác Bình nói rồi : 1/- Thêm dòng code :(if (or (= h1 nil) (= tx1 nil) (= ty1 nil))

vào ngay phía trên đoạn code:
(setq h1 (getreal (strcat "\n Cao text < " (rtos h 2 2) " >: "))
tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 2)">: 1/"))
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/")))
2/- Thêm một dấu ngoặc đóng hàm if vào cuối dòng code : ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) để trở thành:
ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 2)">: 1/"))) )
Việc muốn các dữ liệu đều xuất vào một file thì cũng đơn giản, bạn chỉ cần thay tham só "w" trong dòng code : (setq f (open fn "w")) bằng tham số "a" tức là :
(setq f (open fn "a")) là được.
mà không được, Chắc tại tớ gà quá! hịc

Hề hề hề,
Hãy gửi cái bạn đã làm lên nhé....
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#27 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 02 January 2013 - 10:56 AM

Bác Bình nhiệt tình thật, đây Bác chú sửa theo bác nói rồihttp://www.cadviet.c...57480_cdx_3.lsp mà không được.
  • 0

#28 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 02 January 2013 - 11:27 AM

Qủa thực không biết nói thế nào để cảm ơn Bác Bình! Các Bác thật thấu tình đạt lý, không những viết giúp mà còn chỉ giáo rất tận tình.
Còn vấn đề về file cel, khi xuất ra nó không sai, nhưng các số trong 1 hàng khi vào cel nó nằm trong cùng 1 ô, như vậy rất bất tiện. Với lại cứ mỗi lần lấy cao độ khoảng cách ở trắc ngang khác thì nó lại xuất ra 1 file cel riêng. Nếu như nó lưu vào cùng 1 file cel thì hay biết mấy. " Cái này tại cá bệnh đam mê cái hoàn hảo nên mình mới nói vậy" . Nếu có gì không phải bác bỏ qua giùm nhé! Dám hỏi Bác Bình, Bác đang công tác ở đâu vậy? Cảm ơn các Bác nhiều, chúc các Bác sức khỏe!

Thay (chr 44) thành (chr 9).
(write-line (strcat (rtos i 2 0) (chr 9) x (chr 9) y) f)
  • 1

#29 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 January 2013 - 11:54 AM

CSV mà dùng (chr 9) thì nó dính liền nhau chứ nhỉ?
  • 2

* 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.


#30 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 02 January 2013 - 12:24 PM

CSV mà dùng (chr 9) thì nó dính liền nhau chứ nhỉ?

Tôi quên không check khi ghi file CSV.

Nhưng khi ghi file XLS (setq fn (getfiled "Select a File" "" "xls" 1)) trong code của duyngoc thì (chr 9) sẽ tách ra các cell riêng biệt.
  • 0

#31 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 02 January 2013 - 04:00 PM

Không, cái nguyên bản của Bác Bình gửi là xuất ra đuôi " CSV " nhưng khi xuất ra nó liền nhau, nên mình sữa lại thành đuôi XLS luôn. Nhờ các Bác xem hộ!
  • 0

#32 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 02 January 2013 - 04:09 PM

Không, cái nguyên bản của Bác Bình gửi là xuất ra đuôi " CSV " nhưng khi xuất ra nó liền nhau, nên mình sữa lại thành đuôi XLS luôn. Nhờ các Bác xem hộ!

Hề hề hề,
Setup lại file cvs để format dấu thâp phận là dấu chấm như bác Doan van Ha đã nói xem sao.....

Đã xem file chú sửa, nhưng chú sửa nhiệt tình quá, đổi luôn cả kiểu file là xls. cái vụ file xls này thì mình không rành lắm mà chỉ thường dùng là xuất sang file cvs. sau đó nếu cần thì saveas lại thành xls.
Chú chơi hăng quá thì bác thua luôn. hãy xem hướng dẫn của các bác khác nhé.
Hề hề hề,
Đây là file kết quả xuất ra sau khi mình đã sửa lisp như nói với bạn.
http://www.cadviet.c...94_tnkm2km3.rar
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#33 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 02 January 2013 - 04:18 PM

1). Nếu xuất ra CSV: set dấu thập phân là dấu chấm trước khi xuất file.
2). Nếu xuất ra XLS (như chủ topic đã sửa): sửa (chr 44) thành (chr 9) như bác Gia_Bach hướng dẫn, không cần set dấu thập phân.
  • 1

* 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.


#34 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 03 January 2013 - 07:53 AM

Rồi tớ sửa rồi, vấn đề các dữ liệu nằm các ô khác nhau đã được giải quyết. Nhưng còn vấn đề này nữa:
1.Mỗi lần chuyển sang trắc ngang khác thì nó vẫn mở một file cel và bắt mình phải lưu thành 1 bản lưu chồng file đã có, cài này rất bất tiện, nếu nó chỉ xuất ra và cùng 1file cel và chỉ cần lưu 1 lần thì hay biết mấy.
Chúc các bác ngày mới nhiều niềm vui!
  • 0

#35 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 03 January 2013 - 04:58 PM

Rồi tớ sửa rồi, vấn đề các dữ liệu nằm các ô khác nhau đã được giải quyết. Nhưng còn vấn đề này nữa:
1.Mỗi lần chuyển sang trắc ngang khác thì nó vẫn mở một file cel và bắt mình phải lưu thành 1 bản lưu chồng file đã có, cài này rất bất tiện, nếu nó chỉ xuất ra và cùng 1file cel và chỉ cần lưu 1 lần thì hay biết mấy.
Chúc các bác ngày mới nhiều niềm vui!

Hề hề hề,
Ai bảo vậy??? Đã xem file kết quả mình gửi chưa???
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#36 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 03 January 2013 - 05:06 PM

Thế này bác Bình: cứ mỗi lần mình chuyển dang trắc ngang khác để lấy cao độ và khoảng cách thì nó lại mở ra 1 file cel và mình phải lưu. bác thử dùng lisp mà xem.
  • 0

#37 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 04 January 2013 - 09:58 AM

Thế này bác Bình: cứ mỗi lần mình chuyển dang trắc ngang khác để lấy cao độ và khoảng cách thì nó lại mở ra 1 file cel và mình phải lưu. bác thử dùng lisp mà xem.

Hề hề hề,
Mình dùng hoài rồi chứ bộ bạn hổng thấy cái file kết quả mình gửi sao???
Vấn đề là khi lisp hiện hộp thoại chọn file, bạn phải chọn vào đúng cái tên file mà bạn muốn nhập thêm vào là Ok....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#38 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 04 January 2013 - 03:36 PM

Đó chính là ý chú, chú thấy bất tiện khi mỗi lần chuyển sang trắc ngang khác lại đòi lưu file, bác có thể sửa lại nó chỉ lưu thành 1 bản và nó chỉ bắt lưu 1 lần thôi không? hề hề tham quá!
  • 0

#39 duyngoc

duyngoc

    biết vẽ pline

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

Đã gửi 08 January 2013 - 09:40 AM

Các BÁC đâu hết rùi, giúp chú hoàn thiện lisp này với. Hay gần tết ai cũng bận ta?
  • 0

#40 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 08 January 2013 - 09:52 AM

Hề hề hề,
Mình dùng hoài rồi chứ bộ bạn hổng thấy cái file kết quả mình gửi sao???
Vấn đề là khi lisp hiện hộp thoại chọn file, bạn phải chọn vào đúng cái tên file mà bạn muốn nhập thêm vào là Ok....

Hề hề hề.
1/- Ý chú như vậy là quá cùn. Không nhẽ cả đời làm việc chỉ nhập số liệu vào một file duy ngốc thôi ư.?? Bác đây không thể chiều ý chú.
2/- Nếu chú vẫn thích cùn thì hãy tự làm lấy. Đơn giản là xóa cáo dòng code (setq fn (getfiled .......)) đi và thay nó bằng (setq fn "tên file muốn lưu")
3/- Nếu chú vẫn giữ tư duy làm việc kiểu cùn thế này thì tốt nhất nên kiếm cô vợ giàu mà núp váy.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.