Đến nội dung


Hình ảnh
- - - - -

Nhờ hướng dẫn sử lý file số liệu(Text) bằng LISP


  • Please log in to reply
35 replies to this topic

#21 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 21 August 2010 - 09:53 PM

Duy cũng quan tâm đề tài này sao.Bên mình ít có ai để ý lĩnh vực lập trình lắm.
Có khi làm vất vả quá ít ai để ý học
Cảm ơn em nhé.
  • 0

#22 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 21 August 2010 - 10:14 PM

(setq File2 (open "D:\\FILE2.txt" "r"))
(Setq W 0); Thiết lập biến W = 0
  • 0

#23 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 21 August 2010 - 10:24 PM

Mình thay vào thế này o được
(setq file2 (getfiled " Chonn File ghep" "d:/" "TXT" 4 ))
(setq file2 (open file2 "r"))
(setq w 0)
báo là :

error: too few arguments
  • 0

#24 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 22 August 2010 - 08:17 AM

1.Trong lisp của bạn hoa35ktxd khi truy cập File thường phải trực tiếp truy cấp theo đường dẫn như sau
D:\\FILETEXT\\FILE1.txt.
Vậy trong trường hợp tên file file1,2,3 vẫn gửi nguyên tôi muốn sủ lý trong 1 thư mục bất kỳ .Như vậy D:\\ batky\\ file1.
Khi sử dụng tôi chỉ cần hỏi Nhập tên thư mục( Hoạc dùng hàm getfiled dẫn đến thư mục).
Như vậy tên thư mục phải trở thành 1 biến .
2.Tôi muốn sửa thành hàm getfiled tìm file2 ,thì phải làm bằng cách nào(làm chỉ được file1,file3...không được file 2)
Để làm điều đó thì tôi phải sửa chương trình trên như thế nào.
Cảm ơn sự quan tâm của các bạn.
  • 0

#25 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 22 August 2010 - 08:22 AM

Duy cũng quan tâm đề tài này sao.Bên mình ít có ai để ý lĩnh vực lập trình lắm.
Có khi làm vất vả quá ít ai để ý học
Cảm ơn em nhé.

Bổ sung bác 1 ít kiến thức về file.

*Hàm getfiled làm xuất hiện hộp thoại chọn file Cú pháp:
(getfiled tieude tenfile duoi kieu) trong đó:
-tieude: là nội dung dòng chử xuất hiện trên tiêu đề hộp thoại.
-tenfile: là tên file hoặc đường dẩn mặc định xuất hiện sẵn trong hộp thoại.
-duoi: là phẩn mở rộng của file.
-kieu: là kiểu hộp thoại open hay save:
+1: Hộp thoại save.
+8: Hộp thoại open.
-Lưu ý các thông số trên điều phải được xác định, tham số nào không sử dụng phải gán cho nó giá trị rổng "".
-Dù hộp thoại là save hay open thì kết quả của hàm getfiled là một chuổi dạng đường dẩn, làm gì với nó do mình quyết định.

*Đọ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.
  • 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


#26 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 22 August 2010 - 08:23 AM

Những gì bác hỏi ở đây thực ra toàn là những kiến thức rất cơ bản của Lisp. Bác hãy chịu khó nghiên cứu thêm một chút, chắc chẳng có ai chỉnh sửa chi li theo những yêu cầu thất thường của bác đâu.
Xem qua tâm sự của bác tôi thấy bác cũng thuộc diện có máu mặt trong làng lập trình, vậy mà một chút tư duy như thế bác không làm được sao?
Thân.
  • 0

#27 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 22 August 2010 - 08:45 AM

Mình thế hệ quá cũ nên,trước chỉ sử dụng pascal là chính ,nghĩ viêt đã đủ và dùng,lâu nghĩ không cần nữa.Song hiện tại thế Vlisp,lisp có nhiều tính năng hay nên muốn học.Không phải mình thất thường đâu .
Mình muốn cập nhật thêm các tính năng để học thôi.tiến tới để tự viết cho mình và viết giúp cho mọi người khác như mục tiêu của diễn đàn.
Đây là những bước đầu để mình nghiên cứu nó,vì cũng bỏ lâu rồi .Nghĩ đã hoàn thành sứ mệnh trong giai đoạn mình,nhưng thế hệ trẻ trong ngành mình ít người muốn tư duy quá.Do vậy lại phải gồng mình lên thôi.
Mình sinh 1964 nên học cái mới cũng không đơn giản.Đế tuổi này mà còn phải hỏi từng tý 1 cũng xấu hổ lắm chứ.
Cũng đã mua ,dow các hướng dẫn về Vlisp,líp nhưng chưa tiêu hóa được nó ngay được.
Thân.
  • 0

#28 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 22 August 2010 - 09:54 AM

Rõ khổ, trâu già lại phải đi cày ruộng sâu :D .
Theo em bác cứ tà tà, bác chỉ cần hiểu được cú pháp của Lisp thì dễ dàng suy luận ra được thôi. Bác đã thạo Pascal rồi thì cũng sẽ dễ, ngày trước em còn chẳng được học Pascal, chỉ được học PQBASIC (hic, tủi thân lắm)
Em nói thất thường là ở chỗ: Dù bác có tự viết ra đi chăng nữa thì chính bác cũng thấy mệt, chẳng lẽ cứ liên tục thay đổi code theo cách tổ chức dữ liệu hay sao. Nguồn dữ liệu là 1 yếu tố cố định, không nên thay đổi thất thường như bác, phần mềm nào cũng thế thôi người ta cũng phải có những cái chuẩn cố định.
Lisp viết rất dễ, trừ Dialog và các hàm nâng cao.
Bác cứ nhấn F1 rồi chịu khó mò 1 chút là sẽ làm được.
  • 0

#29 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 22 August 2010 - 10:14 AM

Cũng ham muốn để viết cho hỗ trợ anh em ngành trắc địa bản đồ .Anh em vất vả qúa ,các chương trình toàn cóp nhặt,không hợp lý.Nhiều Ts thì viết bằng fotran sang cad bôi bác qua lại đòi bản quyền cao ,crack được thì làm hỏng anh em trắc địa vì đưa anh em tụt lùi với thời cuộc.bây giờ vẫn DOs,dxf,scr,lisp .. e không ổn,lại gây nhầm lẫn. Thì muốn viết phần mềm phải đặt ra mọi tình huống,tùy biến.Làm ra cái mà người sủ dụng muốn chứ không phải người viết muốn đâu.
trong ngành mình dữ liệu đầu vào rất đa dạng,do vậy muốn học đầu tiên là việc xử lý danh sách này ,để tùy biến các dữ liệu theo ý mình.Nghia là việc nhiều file ghép lại ,chuyển hàng ,chuyển côt,ghép dũ liệu vào đầu ,giũa ,cuối,vào bât kỳ chỗ nào...
Ví như ban tmctpc rất nhiều công tìm kiếm,biên dịch ,giới thiệu ,biên tập các phần mềm nước ngoài ,nhưng dân mình chỉ quen ăn cơm nên đua cho bánh mỳ với sup ,lap xương .. .chưa quen không dùng được.Các bài viết của bạn ấy không ai phản hồi và trôi vào vào quên lãng.Không phủ nhận cái tâm của ngừời viết nhưng viết cái anh em không dùng được e cũng khổ công người viết.
Tôi là người chỉ dạo kỹ thuật,tiếp xúc nhiều ,biết cái anh em cần ,biết cái thiếu kém của các phần mềm,vậy không viết được hổ trợ anh em thì cảm thấy như bác sỹ đứng trươc thương binh nặng mà phải bỏ đi.
Mình là nhưng người hướng dẫn phần mềm Topcon đầu tiên ở Bắc Việt nam ,thường xuyên tham gia hội thảo về phần mềm,máy công cụ mới mà còn bị bạn vuvuzela nói không chịu đọc mà,chỉ bấm bụng mà chịu thôi.
Thôi thì già cũng phải cố gắng vậy,cố tham gia diễn đàn 30 năm nũa nên học vẫn có ích chứ.
Xin cảm ơn lần nữa.
  • 0

#30 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 22 August 2010 - 11:10 AM

Ặc, tự nhiên lại có tên mình
Tôi nghĩ là bác NDBNGO có chí cầu tiến đấy, luôn suy nghĩ làm sao chương trình chạy nhanh nhất, bỏ qua những thao tác thừa mà mình có thể làm thành 1 lệnh được và chất luợng nhất. Cái này đòi hỏi người TƯ VẤN luôn động não và có 2 kỹ năng cần thiết : Lập trình và khả năng đưa ra tình huống để bằng mọi cách đưa những thao tác thực hiện về càng ít lệnh càng tốt.
Vì thế nghề TƯ VẤN ăn nhau là TỐC ĐỘ và ĐỘ CHÍNH XÁC CAO
Các công ty và cá nhân đều có bảo bối của riêng mình để tồn tại
Trên diễn đàn thì anh em không có đủ thời gian để thực hiện hoàn chỉnh các yêu cầu của bác đâu (vì phần mềm hòan chỉnh của các GS, TS đòi những 5 chai cơ mà), mà chỉ làm động tác "TIÊN NHÂN CHỈ LỘ" để anh em có thể triển khai ý tưởng của mình tiếp theo.
Còn về vấn đề ghép file của bác thì theo tôi nghĩ cái này không cần thiết vì Autolisp có khả năng đọc các file trong 1 thư mục
Bác có thể dùng hàm này để list ra toàn bộ file txt để thực hiện lệnh command ... nhé :

(vl-directory-files "d:/FileTOPCON" "*.txt")

Bon...on...n
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#31 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 22 August 2010 - 11:48 AM

Vụ thứ 2 của bác em đã giải quyết xong tuy nhiên file nguồn của bác có 1 chỗ trùng 2 dòng giống nhau nhưng file đích của bác lại chỉ cho ra 1 dòng đồng thời dòng tiếp theo không dúng quy luật (Vị trí 203) Bác xem lại nhé.
Còn đây là đoạn code xử lý:
(defun c:ChuyenDoi()
(setq File (getfiled "Chon file" "" "" 4)
File1 (open File "r")
File2 (open (strcat (GetFolder File) "FILE2.txt") "a"))
(while (setq Line1 (read-line File1))
(setq LLine1 (split Line1 " "))
(if (= (nth 0 LLine1) "STN")
(progn
(setq LL (split (nth 1 LLine1) ",")
Str (strcat "TR " (nth 0 LL) " " (nth 1 LL)))
(write-line Str File2)
)
)
(if (= (nth 0 LLine1) "BS")
(progn
(setq LL (split (nth 1 LLine1) ","))
(write-line (strcat "DH " (nth 0 LL)) File2)
)
)
(if (= (nth 0 LLine1) "SS")
(setq LL (split (nth 1 LLine1) ","))
)
(if (= (nth 0 LLine1) "HD")
(progn
(setq LL1 (split (nth 1 LLine1) ",")
LL1 (Joint LL1 " "))
(write-line (strcat (nth 0 LL) "\t" LL1 " " (nth 1 LL)) File2)
)
)
)
(close file1)
(close file2)
)
(defun Split(StrOrg Delimiter / ListAnswer)
(setq ListAnswer nil)
(while (not (null (setq DeliPoint (vl-string-search Delimiter StrOrg))))
(setq ListAnswer (append ListAnswer (list (substr StrOrg 1 DeliPoint))))
(setq StrOrg (substr StrOrg (+ (strlen Delimiter) 1 DeliPoint)))
)
(setq ListAnswer (append ListAnswer (list StrOrg)))
)
(defun Joint (LstOrg Delimiter / StrAnswer I)
(setq I 0)
(setq StrAnswer "")
(while (< I (length LstOrg))
(if (= StrAnswer "")
(setq StrAnswer (nth I LstOrg))
(setq StrAnswer (strcat StrAnswer Delimiter (nth I LstOrg)))
)
(setq I (1+ I))
)
(setq StrAnswer StrAnswer)
)
(defun GetFolder(Str)
(setq I (strlen Str))
(while (> I 0)
(if (= (substr Str I 1) "\\")
(setq Folder (substr Str 1 I)
I 0)
)
(setq I (1- I))
)
(setq Folder Folder )
)
Lưu ý: File đích sẽ được tạo ra trong cùng thư mục của file nguồn.
  • 1

#32 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 22 August 2010 - 12:50 PM

Cảm ơn em .Anh sẽ phân tích để có thể tự viêt lấy trong thời gian ngắn nhất.
Đoạn nào lỗi em bỏ nó đi được mà ,các hàng đó giống nhau thôi
  • 0

#33 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 22 August 2010 - 02:54 PM

Em chay thử chưa .anh chạy chỉ ra tên file file2.txt trong file không có gì cả.
Mấy file khác anh chay kêt quả đều thế .Chương trình báo nil ,không có lỗi nhung o có gì cả
  • 0

#34 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 22 August 2010 - 03:26 PM

Gay thật.
Do lỗi của diễn đàn nên khi copy và dán nên đoạn này
(setq LLine1 (split Line1 " "))
sẽ thành
(setq LLine1 (split Line1 " "))
Có 5 kỹ tự trống liền nhau trong dấu ngoặc kép và được cắt giảm xuống 1 (lỗi nên không diễn đạt được).
Bác hãy sửa lại giúp em hoặc bấm vào nút Download lisp file
  • 0

#35 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 22 August 2010 - 10:00 PM

Em viết bằng dấu cách nhé , riêng côt đầu format là 7 cách (để có thể chèn 7 ký tự ) ,các cột sau thì chỉ cần 1 đấu cach (hoắc tư do cũng được).
Nói chung dùng dấu cách như chương trình 1 là được
  • 0

#36 NDBNGO

NDBNGO

    biết lệnh rotate

  • Members
  • PipPipPip
  • 132 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 23 August 2010 - 10:15 AM

Cảm ơn hoa35ktxd.
Mình đã sửa được theo ý muốn về fomat.Cảm ơn về chương trình,mình đâng cố gắng hiểu nó và học thêm.
Mong được sự giúp đỡ thường xuyên của bạn.
  • 1