Đế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

#21 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 10 February 2012 - 03:02 PM

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

Mấy ngày nay không thấy bác Tue_NV online nên tôi làm giúp cho bạn đây:

(defun c:gg ( / osm cmd tenfile file cc ccc lst pt gtri)
(command "undo" "be")
(setq osm (getvar "osmode") cmd (getvar "cmdecho"))
(setvar "osmode" 0) (setvar "cmdecho" 0)
(setq tenfile (getfiled "Chon file" "" "txt" 10))
(setq file (open tenfile "r"))
(read-line file)
(if (= (setq cc (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0)
(setq ccc (getreal "\nChieu cao chu: ")))
(while (setq dulieu (read-line file))
(setq lst (TUE-STR-SPLIT " " dulieu))
(setq pt (list (nth 0 lst) (nth 1 lst)))
(setq gtri (nth 2 lst))
(if (= cc 0)
(command ".text" "mc" pt ccc 0 gtri)
(command ".text" "mc" pt 0 gtri)))
(close file)
(setvar "osmode" osm) (setvar "cmdecho" cmd)
(command "undo" "end")
(princ))
;-----
(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))))

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


#22 vothanhdn

vothanhdn

    biết vẽ ellipse

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

Đã gửi 13 February 2012 - 08:46 AM

Mấy ngày nay không thấy bác Tue_NV online nên tôi làm giúp cho bạn đây:


(defun c:gg ( / osm cmd tenfile file cc ccc lst pt gtri)
(command "undo" "be")
(setq osm (getvar "osmode") cmd (getvar "cmdecho"))
(setvar "osmode" 0) (setvar "cmdecho" 0)
(setq tenfile (getfiled "Chon file" "" "txt" 10))
(setq file (open tenfile "r"))
(read-line file)
(if (= (setq cc (cdr (assoc 40 (tblsearch "style" (getvar "textstyle"))))) 0)
(setq ccc (getreal "\nChieu cao chu: ")))
(while (setq dulieu (read-line file))
(setq lst (TUE-STR-SPLIT " " dulieu))
(setq pt (list (nth 0 lst) (nth 1 lst)))
(setq gtri (nth 2 lst))
(if (= cc 0)
(command ".text" "mc" pt ccc 0 gtri)
(command ".text" "mc" pt 0 gtri)))
(close file)
(setvar "osmode" osm) (setvar "cmdecho" cmd)
(command "undo" "end")
(princ))
;-----
(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))))

Oh, cám ơn a nhiều 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"...!!!


#23 engineer0405

engineer0405

    biết vẽ polygon

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

Đã gửi 08 October 2013 - 04:01 PM

*Đọ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)

Anh Duy ơi cho em hỏi tý ạ

Nếu file text nội dung file có dấu tiếng việt thì làm sao mà ghi đc vậy anh


  • 0