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

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

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

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

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

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)

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

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.

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

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

  • 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

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.com/upfiles/3/67034_vd.rar

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

  • 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

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ề,

  • 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

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

^^

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

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

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

  • 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

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

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

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

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

  • 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

 

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

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!

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")

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! 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")

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

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

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

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

  • 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

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é!

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

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


×