Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
nhunha_pro279

Yêu Cầu Lisp Lọc Text Dạng Số Ra Khỏi Chuỗi Text

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

Em có một vấn đề muốn nhờ các cao thủ autolisp giúp đỡ. Ví dụ em có chuỗi text "Chiều dài đoạn là 150.5m" em muốn tách phần số 150.5 ra khỏi chuỗi text. Kính nhờ các cao thủ trợ giúp ạ.

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
Doan Van Ha    2.678

Gợi ý: duyệt qua từng ký tự của chuỗi, đến khi gặp ký tự là số thì cắt phần đầu đi, sau đó lấy atof của phần còn lại.

  • 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

Gợi ý: duyệt qua từng ký tự của chuỗi, đến khi gặp ký tự là số thì cắt phần đầu đi, sau đó lấy atof của phần còn lại.

Nhờ anh có thể chỉ giáo em về phần thuật toán được không ạ? Ý tưởng của em là như thế nhưng giải quyết vấn đề thì còn gà mờ lắm anh #Doan Van Ha ơ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
Bee    108

Em có một vấn đề muốn nhờ các cao thủ autolisp giúp đỡ. Ví dụ em có chuỗi text "Chiều dài đoạn là 150.5m" em muốn tách phần số 150.5 ra khỏi chuỗi text. Kính nhờ các cao thủ trợ giúp ạ.

Search search và search ^_^ tham khảo tí cái này thôi nhé.

 

(setq number (search "Chieu dai doan la 150.5m"))

(defun search (s)
  (vl-list->string
    (vl-remove-if
      '(lambda (x) (or (< x 48) (> x 57)))
      (vl-string->list s)
    )
  )
)
  • 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

 

Search search và search ^_^ tham khảo tí cái này thôi nhé.

 

(setq number (search "Chieu dai doan la 150.5m"))

(defun search (s)
  (vl-list->string
    (vl-remove-if
      '(lambda (x) (or (< x 48) (> x 57)))
      (vl-string->list s)
    )
  )
)

Cảm ơn anh nhé! Với cú pháp hàm search của anh em đã làm được file lisp theo ý muốn của mình ạ. Hy vọng được anh giải thích rõ hơn về cú pháp của hàm và các hàm vl-, vla- trong visua lisp (em tìm tài liệu về vấn để này mà chưa tìm được). Mong được anh chỉ giáo thêm!

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

Dùng hàm ở trên thì dấu thập phân bị mất. Nên theo ý bác Hạ!

*** VL-, VLA- ... Tham khảo: http://www.afralisp.net/archive/

Thập phân và chữ ko dấu thì update cái này của Tharwat ^_^ 

 

Nói chung là còn nhiều trường hợp nên chủ thớt phải tự xử lý theo ý của mình thôi.

(defun search (s)
  (vl-list->string
    (vl-remove-if
      '(lambda (x)
	 (or
	   (< 64 x 91)
	   (< 96 x 123)
	 )
       )
      (vl-string->list s)
    )
  )
)
  • 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
Doan Van Ha    2.678

Nên thông cảm nhau bởi ai cũng quá rành nguyên lý. Xui mà chủ thớt rên: Tại sao em nhập string là "Tổng chiều dài 3 đoạn là 150.5m" mà kết quả lại là 3.

Những câu hỏi kiểu này trả lời chán lắm.

  • 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
Bee    108

Nên thông cảm nhau bởi ai cũng quá rành nguyên lý. Xui mà chủ thớt rên: Tại sao em nhập string là "Tổng chiều dài 3 đoạn là 150.5m" mà kết quả lại là 3.

Những câu hỏi kiểu này trả lời chán lắm.

Hì bác Hạ toàn mớm ! Vì hỏi chung chung nên trả lời cũng chung chung như bác là chuẩn rồi. ^_^ Em chỉ lấy 1 ví dụ tham khảo mà chủ thớt like rồi nên thiết nghĩ finish thôi :D

  • 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

Nên thông cảm nhau bởi ai cũng quá rành nguyên lý. Xui mà chủ thớt rên: Tại sao em nhập string là "Tổng chiều dài 3 đoạn là 150.5m" mà kết quả lại là 3.

Những câu hỏi kiểu này trả lời chán lắm.

Mong bác #Doan Van Ha có thể giải thích rõ hơn về vấn đề này được không ạ?

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
Doan Van Ha    2.678

Mong bác #Doan Van Ha có thể giải thích rõ hơn về vấn đề này được không ạ?

Trong string trên có 2 con số: 3 và 150.5 vậy thì lisp không đủ thông minh để biết mà lấy số 3 hay số 150.5

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

Trong string trên có 2 con số: 3 và 150.5 vậy thì lisp không đủ thông minh để biết mà lấy số 3 hay số 150.5

Thật ra em chưa nghĩ được trường hợp này? Nếu xảy ra trường hợp như trên thì có thể giải quyết được bằng cách nào không vậy Bác?

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

Thật ra em chưa nghĩ được trường hợp này? Nếu xảy ra trường hợp như trên thì có thể giải quyết được bằng cách nào không vậy Bác?

 

Vì luật chơi nào cũng có quy định của nó. Nếu vi phạm thì sai, bị loại.

Lisp cũng chỉ là công cụ làm theo "luật" mà bạn đưa ra thôi

Bạn đưa ra luật chơi là được.....

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

Bạn dùng hàm này của Lee

;; Parse Numbers  -  Lee Mac
;; Parses a list of numerical values from a supplied string.

(defun LM:parsenumbers ( str )
    (   (lambda ( l )
            (read
                (strcat "("
                    (vl-list->string
                        (mapcar
                           '(lambda ( a b c )
                                (if (or (< 47 b 58)
                                        (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                        (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                    )
                                    b 32
                                )
                            )
                            (cons nil l) l (append (cdr l) '(()))
                        )
                    )
                    ")"
                )
            )
        )
        (vl-string->list str)
    )
)

ví dụ:

(LM:parsenumbers "1a-2.3b4c56")(1 -2.3 4 56)

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
Nad SK    4

 

Bạn dùng hàm này của Lee

;; Parse Numbers  -  Lee Mac
;; Parses a list of numerical values from a supplied string.

(defun LM:parsenumbers ( str )
    (   (lambda ( l )
            (read
                (strcat "("
                    (vl-list->string
                        (mapcar
                           '(lambda ( a b c )
                                (if (or (< 47 b 58)
                                        (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                                        (and (= 46 b) (< 47 a 58) (< 47 c 58))
                                    )
                                    b 32
                                )
                            )
                            (cons nil l) l (append (cdr l) '(()))
                        )
                    )
                    ")"
                )
            )
        )
        (vl-string->list str)
    )
)

ví dụ:

(LM:parsenumbers "1a-2.3b4c56")(1 -2.3 4 56)

Lee Mac thì đỉnh rồi.

Chưa chạy thử nhưng cho hỏi dấu chấm câu và dấu chấm thập phân có là 1 hay là 2 vậy???

Nếu 2 thì quá hay.

  • Vote giảm 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

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

Đăng nhập để thực hiện theo  

×