Đến nội dung


Hình ảnh
- - - - -

Hỏi code lisp: Lấy text từ .txt đưa vào CAD


  • Please log in to reply
22 replies to this topic

#1 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 03 February 2012 - 02:55 PM

Chào mọi người!

E lấy dữ liệu từ file *.txt để đưa vào CAD, nhưng chỉ đưa ra text các giá trị là number thôi, còn nếu là text thì bị lỗi. Cho e hỏi có code nào để lấy dữ liệu từ file txt mà đối tượng đó là chữ được không ah.
E dùng read; readline;nth, nhưng không không hiểu được chữ

VD: Nội dung của file *.txt (tọa độ x Tọa độ y Giá trị):
(5)
(420668.4321 1166831.7514 2.533)
(420736.9174 1166781.3817 63)
(420677.797 1166750.9546 93)
(420703.5905 1166776.4193 42)
(420725.4003 1166746.1705 A533)

Ghi text trên ra toa độ x,y với nội dung là Giá trị

Cám ơn mọi người....
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#2 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 03 February 2012 - 03:13 PM

Chào mọi người!

E lấy dữ liệu từ file *.txt để đưa vào CAD, nhưng chỉ đưa ra text các giá trị là number thôi, còn nếu là text thì bị lỗi. Cho e hỏi có code nào để lấy dữ liệu từ file txt mà đối tượng đó là chữ được không ah.
E dùng read; readline;nth, nhưng không không hiểu được chữ

VD: Nội dung của file *.txt (tọa độ x Tọa độ y Giá trị):
(5)
(420668.4321 1166831.7514 2.533)
(420736.9174 1166781.3817 63)
(420677.797 1166750.9546 93)
(420703.5905 1166776.4193 42)
(420725.4003 1166746.1705 A533)

Ghi text trên ra toa độ x,y với nội dung là Giá trị

Cám ơn mọi người....

*Đọc dữ liệu từ file txt. Gồm 3 bước:
-Mở file (hàm open).
-Đọc dữ liệu từ file (hàm read-line).
-Đóng file (hàm close)

*Viết dữ liệu vào file txt. Gồm 3 bước:
-Mở file (hàm open).
-Viết dữ liệu vào file (hàm write-line).
-Đóng file (hàm close)

*Hàm Open dùng mở 1 file để đọc hoặc viết dữ liệu vào file. Cú pháp:
(open tenfile kieumo) trong đó:
-tenfile: là đường dẩn đầy đủ của file. Ví dụ “D:\\tailieukythuat\\duy.txt”
-kieumo: là ký tự viết thường “a” “r” “w” dùng xác định kiểu mở file:
+”a” mở file tenfile để chép dữ liệu nối tiếp vào cuối file. Nếu tìm thấy file con trỏ nằm cuối file, dữ liệu chép vào sẽ nối vào cuối file. Nếu không tìm thấy file tenfile sẽ được tạo mới, con trỏ nằm đầu file.
+”r” mở file tenfile để đọc dữ liệu. Con trỏ nằm tại vị trí dòng đầu tiên của file. Nếu không tìm thấy file này hàm trả về nil.
+”w” mở file tenfile để chép dữ liệu vào file này. Nếu tìm thấy dữ liệu trong file sẽ bị chép đè lên. Nếu không tìm thấy file tenfile sẽ được tạo mới, con trỏ nằm đầu file.

*Khi open 1 file bạn cấp cho nó 1 tên đại diện. Nhớ rằng file phải được đóng bằng hàm close trước khi thoát khỏi acad nếu không file có nguy cơ bị văng đi đâu đó không tìm ra.

-Ví dụ mở file C:\\tailieukythuat\\duy.txt viết dòng tailieukythuat.com và đóng file lại như sau:

(setq tenfile (open “C:\\tailieukythuat\\duy.txt” “a”))
(setq noidungviet “tailieukythuat.com”)
(write-line noidungviet tenfile)
(close tenfile)

-Ví dụ mở file C:\\tailieukythuat\\duy.txt đọc dòng dầu tiên và đóng file lại như sau:

(setq tenfile (open “C:\\tailieukythuat\\duy.txt” “r”))
(setq noidungdoc (read-line tenfile))
(close tenfile)

-Lưu ý khi thực hiện xong hàm read-line thì con trỏ sẽ nhảy xuống dòng kế tiếp nên muốn đọc nội dung dòng thứ n của file C:\\tailieukythuat\\duy.txt thì mình dùng hàm repeat n lần với dòng (setq noidungdoc (read-line tenfile)). Ví dụ đọc dòng thứ 3 và gán cho biến noidungdoc:

(setq tenfile (open “C:\\tailieukythuat\\duy.txt” “r”))
(repeat 3
(setq noidungdoc (read-line tenfile))
)
(close tenfile)
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3 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 03 February 2012 - 03:31 PM

Chào mọi người!

E lấy dữ liệu từ file *.txt để đưa vào CAD, nhưng chỉ đưa ra text các giá trị là number thôi, còn nếu là text thì bị lỗi. Cho e hỏi có code nào để lấy dữ liệu từ file txt mà đối tượng đó là chữ được không ah.
E dùng read; readline;nth, nhưng không không hiểu được chữ

VD: Nội dung của file *.txt (tọa độ x Tọa độ y Giá trị):
(5)
(420668.4321 1166831.7514 2.533)
(420736.9174 1166781.3817 63)
(420677.797 1166750.9546 93)
(420703.5905 1166776.4193 42)
(420725.4003 1166746.1705 A533)

Ghi text trên ra toa độ x,y với nội dung là Giá trị

Cám ơn mọi người....

Tốt nhất là bạn post file txt và file lsp lên, mọi người sẽ sửa cho đúng y/c của bạn, chứ đọc số hay text cũng vậy thôi.
  • 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.


#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 03 February 2012 - 04:34 PM

Chào mọi người!

E lấy dữ liệu từ file *.txt để đưa vào CAD, nhưng chỉ đưa ra text các giá trị là number thôi, còn nếu là text thì bị lỗi. Cho e hỏi có code nào để lấy dữ liệu từ file txt mà đối tượng đó là chữ được không ah.
E dùng read; readline;nth, nhưng không không hiểu được chữ

VD: Nội dung của file *.txt (tọa độ x Tọa độ y Giá trị):
(5)
(420668.4321 1166831.7514 2.533)
(420736.9174 1166781.3817 63)
(420677.797 1166750.9546 93)
(420703.5905 1166776.4193 42)
(420725.4003 1166746.1705 A533)

Ghi text trên ra toa độ x,y với nội dung là Giá trị

Cám ơn mọi người....

Hề hề hề,
Vấn đề bạn hỏi hơi khó hiểu, mặc dù các bác Duy, Ha đã trả lời, song hình như chưa hoàn toàn trúng với ý bạn cần. Mong bạn hãy gửi file (như bác Ha đã nói) hoặc trình bày lại cho rõ hơn cái ý của bạn.
Phải chăng là bạn muốn đọc giá trị của từng dòng trong file text (tỷ như 420668.4321 1166831.7514 2.533 ) và ghi vào Cad là "Tọa độ x: 420668, Tọa độ y: 1166831.7514, Giá trị: 2.533" ?????
Hề hề hề,
Cái chữ cái nghĩa của ta khó hiểu lắm, mong bạn hãy cố gắng để trình bày vấn đề cụ thể hơn bạ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.

#5 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 03 February 2012 - 05:19 PM

Cám ơn mọi người. Vấn đề của e là vậy:
- Những Text nào từ *.txt nếu là ở dạng số (Number) thì e ghi ra được CAD. Ở đây e dùng Rtos()
- Những Text nào không phải là dạng số, trong VD của e là dòng thứ 4 và 5, text ghi ra là B.42A533 thì không thể ghi ra text được.
E không biết làm sao để đưa được 2 giá trị đó ra dạng text của CAD.
Nhờ mọi người giúp.
http://www.cadviet.c.../3/67034_vd.rar
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 February 2012 - 05:44 PM

Đọc kết quả từ file Text luôn trả về string.
Giả sử sau hàm read-line bạn thu được 1 string như thế này : "(123 a1 456 b2)"
Sau khi dùng hàm read bạn thu được 1 list (123 A1 456 B2).
Chú ý 123, 456 đều là số nên bạn dùng nth để lấy ra nó vẫn là số, kết hợp với hàm rtos bạn sẽ có string, có thể dùng trong lệnh chèn text được, còn A1, B2 là SYM, bạn không dùng như vậy được
=> Lời khuyên :
Bạn hãy convert phần từ có khả năng là text thành String bằng cách :
THay :

gtri (nth 2 dulieu)

thành

gtri (vl-princ-to-string (nth 2 dulieu))

Untest, n chắc là được
  • 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


#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 03 February 2012 - 06:20 PM

Cám ơn mọi người. Vấn đề của e là vậy:
- Những Text nào từ *.txt nếu là ở dạng số (Number) thì e ghi ra được CAD. Ở đây e dùng Rtos()
- Những Text nào không phải là dạng số, trong VD của e là dòng thứ 4 và 5, text ghi ra là B.42A533 thì không thể ghi ra text được.
E không biết làm sao để đưa được 2 giá trị đó ra dạng text của CAD.
Nhờ mọi người giúp.
http://www.cadviet.c.../3/67034_vd.rar

Hề hề hề,
Mình có hơi thắc mắc là tại sao bạn lại phải dùng hàm read ở đây nhỉ??? Biến một text số thành số rồi lại phải chuyển số này thành chuỗi text nhờ hàm rtos, như vậy chả hơi loằng ngoằng ư.
Khi bạn read-line nó đã là text rồi, chỉ cần tách nó thành các text con và command "text' các text này vào thì có điều chi không đẹp nhỉ????
Ví dụ từ chuỗi text "123 b.42 456 a3" bạn tách nó thành các chuỗi text "123" "b.42" "456" "a533" rồi dùng thẳng chúng vào trong hàm command "text" có được không??????
Hề hề hề,
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 February 2012 - 09:01 PM

Hề hề hề,
Mình có hơi thắc mắc là tại sao bạn lại phải dùng hàm read ở đây nhỉ??? Biến một text số thành số rồi lại phải chuyển số này thành chuỗi text nhờ hàm rtos, như vậy chả hơi loằng ngoằng ư.
Khi bạn read-line nó đã là text rồi, chỉ cần tách nó thành các text con và command "text' các text này vào thì có điều chi không đẹp nhỉ????
Ví dụ từ chuỗi text "123 b.42 456 a3" bạn tách nó thành các chuỗi text "123" "b.42" "456" "a533" rồi dùng thẳng chúng vào trong hàm command "text" có được không??????
Hề hề hề,

Hề hề
Trong trường hợp này dùng read nhanh hơn xử lý chuỗi bác ạ ^^ 2 số đầu bạn ấy cần trả về là tọa độ chứ k phải string.
Nếu yêu cầu là các phần tử toàn string thì (mapcar 'vl-princ-to-string (read Chuỗi_có_cặp_dấu() )) cũng vẫn nhanh hơn hàm tách chuỗi (vì phải xử lý ngăn cách là " " hay "\t" ), cũng nhanh hơn cả (vl-remove "" (acet-str-to-list " " Chuỗi_không_có_cặp_dấu() ))
Hơn nữa dòng dữ liệu của bạn ấy đã có sẵn cặp "()"
Thậm chí có lúc nó chưa có e còn thêm vào : http://www.cadviet.com/forum/index.php?showtopic=59801&view=findpost&p=185467
^^
  • 2

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 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 February 2012 - 08:38 AM

Đọc kết quả từ file Text luôn trả về string.
Giả sử sau hàm read-line bạn thu được 1 string như thế này : "(123 a1 456 b2)"
Sau khi dùng hàm read bạn thu được 1 list (123 A1 456 B2).
Chú ý 123, 456 đều là số nên bạn dùng nth để lấy ra nó vẫn là số, kết hợp với hàm rtos bạn sẽ có string, có thể dùng trong lệnh chèn text được, còn A1, B2 là SYM, bạn không dùng như vậy được
=> Lời khuyên :
Bạn hãy convert phần từ có khả năng là text thành String bằng cách :
THay :

thành

Untest, n chắc là được

KetXu nên kiểm tra lại (1 trường hợp nó ra như thế này) :
(read "(420703.5905 1166776.4193 B.42)") -> (420704.0 1.16678e+006 B)
  • 2

#10 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 04 February 2012 - 10:10 AM

Đọc kết quả từ file Text luôn trả về string.
Giả sử sau hàm read-line bạn thu được 1 string như thế này : "(123 a1 456 b2)"
Sau khi dùng hàm read bạn thu được 1 list (123 A1 456 B2).
Chú ý 123, 456 đều là số nên bạn dùng nth để lấy ra nó vẫn là số, kết hợp với hàm rtos bạn sẽ có string, có thể dùng trong lệnh chèn text được, còn A1, B2 là SYM, bạn không dùng như vậy được
=> Lời khuyên :
Bạn hãy convert phần từ có khả năng là text thành String bằng cách :
THay :

thành

Untest, n chắc là được


Cảm ơn a.
E dùng hàm đó thì được nhưng nếu text cần ghi ra của e là A.xxx hoặc ABC.xxx thì nó chỉ xuất hiện text trước dấu chấm thôi. E không biết khắc phục chỗ này sao. Nhờ a giúp tiếp nhé...
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 February 2012 - 12:02 PM


Cảm ơn a.
E dùng hàm đó thì được nhưng nếu text cần ghi ra của e là A.xxx hoặc ABC.xxx thì nó chỉ xuất hiện text trước dấu chấm thôi. E không biết khắc phục chỗ này sao. Nhờ a giúp tiếp nhé...

Bạn có thể tham khảo đoạn code này.

(vl-load-com)
(defun Tue-str-split (split-str str / pos Res-str Tue-str-find)
(defun Tue-str-find (sym str / lst i)
(setq i 0)
(while (setq i (vl-string-search sym str i))
(setq i (+ i 1) lst (append lst (list i)) )
)
lst)

(setq pos (1+ (last (Tue-str-find split-str str))))
(setq posdau (cadr (Tue-str-find split-str str)))
(setq Res-str (list (read(strcat (substr (vl-string-left-trim " " str) 1 posdau) ")"))
(substr str pos (- (strlen str) pos))) )
Res-str)
EX:

(car (TUE-STR-SPLIT " " "(420.45 116.6 B.42)"))
--->>> (420.45 116.6)

(cadr (TUE-STR-SPLIT " " "(420.45 116.6 B.42)"))
--->>> "B.42"
  • 1

#12 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 04 February 2012 - 09:22 PM

Bạn có thể tham khảo đoạn code này.


(vl-load-com)
(defun Tue-str-split (split-str str / pos Res-str Tue-str-find)
(defun Tue-str-find (sym str / lst i)
(setq i 0)
(while (setq i (vl-string-search sym str i))
(setq i (+ i 1) lst (append lst (list i)) )
)
lst)

(setq pos (1+ (last (Tue-str-find split-str str))))
(setq posdau (cadr (Tue-str-find split-str str)))
(setq Res-str (list (read(strcat (substr (vl-string-left-trim " " str) 1 posdau) ")"))
(substr str pos (- (strlen str) pos))) )
Res-str)
EX:

(car (TUE-STR-SPLIT " " "(420.45 116.6 B.42)"))
--->>> (420.45 116.6)

(cadr (TUE-STR-SPLIT " " "(420.45 116.6 B.42)"))
--->>> "B.42"


Cám ơn bác...
Nhưng về phần này thì e bó tay thật, những hàm có liên quan đến vl- thì e chịu thua, nhờ a chỉ rõ giúp nhé.
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 February 2012 - 09:49 PM

Cám ơn bác...
Nhưng về phần này thì e bó tay thật, những hàm có liên quan đến vl- thì e chịu thua, nhờ a chỉ rõ giúp nhé.

Những hàm vl- ở trong code trên đã có ví dụ trong Help rồi.
Bạn chịu khó đọc thêm các ví dụ trong Help rồi có thắc mắc gì thì hỏi nhé.
Tue_NV sẽ trả lời rõ những thắc mắc của bạn.....
  • 0

#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 February 2012 - 10:49 PM

Hề, đúng là e chưa test thật mà ^^ Tks bác Tuệ tìm Bug :">
  • 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


#15 vodanhnxc

vodanhnxc

    biết vẽ ellipse

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

Đã gửi 05 February 2012 - 03:25 PM

các bác cho em hỏi ngoài lề tý là muốn chuyển màu các dòng lệnh ở command thì ntn ạ,em muốn thay màu khác cho dễ nhìn,thanks
  • 0

#16 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 05 February 2012 - 04:57 PM

các bác cho em hỏi ngoài lề tý là muốn chuyển màu các dòng lệnh ở command thì ntn ạ,em muốn thay màu khác cho dễ nhìn,thanks

Vào Option => Display => Color => Chọn "Command Line" và đặt "Color" tương ứng.
  • 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.


#17 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 06 February 2012 - 11:37 AM


Những hàm vl- ở trong code trên đã có ví dụ trong Help rồi.
Bạn chịu khó đọc thêm các ví dụ trong Help rồi có thắc mắc gì thì hỏi nhé.
Tue_NV sẽ trả lời rõ những thắc mắc của bạn.....


Cám ơn bác!
Nhung mà khốn khổ thân em thật rồi, vốn English của e thì dốt đặc cán mai, đọc help thì có lẽ đến mấy năm sau e mới viết được cái phần này rồi... Coi như là không theo được rồi... E nghĩ phần này thì xử lý bằng những hàm căn bản sẽ được chứ.
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!


#18 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 February 2012 - 02:31 PM


Cám ơn bác!
Nhung mà khốn khổ thân em thật rồi, vốn English của e thì dốt đặc cán mai, đọc help thì có lẽ đến mấy năm sau e mới viết được cái phần này rồi... Coi như là không theo được rồi... E nghĩ phần này thì xử lý bằng những hàm căn bản sẽ được chứ.

Không biết là bạn có biết các hàm ACET không? Chứ nếu biết ACET mà sợ VL thì dùng cái này xem:

(defun HA1(sym str)
(setq str (substr (substr str 2 (strlen str)) 1 (- (strlen (substr str 2 (strlen str))) 1)))
(acet-str-to-list sym str))
EX:
(HA1 " " "(420.45 116.6 B.42)") => ("420.45" "116.6" "B.42")
P/S (16h15-6/2/2012): Nếu không Acet- và không Vl- thì bạn dùng cái này xem sao:

(defun HA2(sym str / lst)
(defun findstr (str sym / i find)
(setq i 0)
(while (and (/= Find sym) (<= i (- (strlen str) (strlen sym))))
(setq i (1+ i))
(setq find (substr str i (strlen sym))))
(if (= find sym) i nil))
(setq str (substr (substr str 2 (strlen str)) 1 (- (strlen (substr str 2 (strlen str))) 1)))
(while (findstr str sym)
(setq lst (cons (substr str 1 (- (findstr str sym) 1)) lst))
(setq str (substr str (+ (findstr str sym) 1))))
(setq lst (reverse (cons str lst))))
EX:
(HA2 " " "(420.45 116.6 B.42)") => ("420.45" "116.6" "B.42")
  • 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.


#19 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 06 February 2012 - 10:17 PM

Cám ơn bác! Nhung mà khốn khổ thân em thật rồi, vốn English của e thì dốt đặc cán mai, đọc help thì có lẽ đến mấy năm sau e mới viết được cái phần này rồi... Coi như là không theo được rồi... E nghĩ phần này thì xử lý bằng những hàm căn bản sẽ được chứ.

Hàm Lisp xử lý cái này cho bạn

(defun Tue-str-split(sym str / i)
(setq i (strlen str) str1 "")
(while (= (substr str i 1) sym) (setq i (1- i)) )
(setq str (strcat (substr str 1 (1- i)) "\")") j (strlen str))
(while (/= (substr str j 1) sym) (setq j (1- j)))
(read (strcat (substr str 1 j) "\"" (substr str (1+ j) i)))
)
vd:
(TUE-STR-SPLIT " " " ( 420.45 116.6 B.42)")
-->>> (420.45 116.6 "B.42")
  • 0

#20 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 10 February 2012 - 01:47 PM

Hàm Lisp xử lý cái này cho bạn


(defun Tue-str-split(sym str / i)
(setq i (strlen str) str1 "")
(while (= (substr str i 1) sym) (setq i (1- i)) )
(setq str (strcat (substr str 1 (1- i)) "\")") j (strlen str))
(while (/= (substr str j 1) sym) (setq j (1- j)))
(read (strcat (substr str 1 j) "\"" (substr str (1+ j) i)))
)
vd:
(TUE-STR-SPLIT " " " ( 420.45 116.6 B.42)")
-->>> (420.45 116.6 "B.42")


Chào bác!

Chắc phải làm phiền bác đưa giùm code này vào lisp của e với... E không hiểu cách gộp code nên đưa vào mà nó báo "error: too few arguments" thôi...
  • 0

Ứng dụng hỗ trợ thiết kế mạng lưới thoát nước VTD

  - Tính toán mạng lưới thoát nước

  - Vẽ trắc dọc, bình đồ thoát nước

......

Truy cập http://www.vtdvn.com

------------------------------------------------------------------------------------------

"Không có gì chắc chắn, chỉ có 1 điều chắc chắn là không có gì chắc chắn"...!!!