注册 登录
明经CAD社区 返回首页

snddd2000的个人空间 http://www.mjtd.com/?393651 [收藏] [复制] [分享] [RSS]

日志

[函数]AutoCAD.Lisp多行文字过滤掉格式字符 (filterMtext str)

热度 2已有 1520 次阅读2013-9-17 23:36 |系统分类:开发| 多行文字, 格式字符, 过滤

(vl-load-com)
(defun sn:leftnthlst (n lst)
;;;返回一个表中的前n个元素的表
;;;示例:(sn:leftnthlst 2 '(1 2 3 4 5 6));返回表(1 2)
;;;如果输入的n值大于表长返回原表;小于1返回nil
(vl-remove nil
(mapcar '(lambda (x)
(if (>= (setq n (1- n)) 0)
x
nil
)
)
lst
)
)
)
(defun sn:rightnthlst (n lst)
;;;返回一个表中的第n个元素开始的表
;;;示例:(sn:rightnthlst 2 '(1 2 3 4 5 6));返回表(2 3 4 5 6)
;;;如果输入的n值大于表长返回原表;小于1返回nil
(vl-remove nil
(mapcar '(lambda (x)
(if (> (setq n (1- n)) 0)
nil
x
)
)
lst
)
)
)
;;;定义一个删除指定位置的表内某项,0为第一项
(defun sn:nthremove (n lst / newlst)
;;;示例:(sn:nthremove 2 '(1 2 3 4 5 6));返回(1 2 4 5 6)
(if (= 0 n)
(cdr lst)
(append (sn:leftnthlst n lst) (sn:rightnthlst (+ 2 n) lst))
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun listposandnumber (lst char beforechar / poslst n relst)
;;; (listposandnumber '(92 92 123 92 92 123 49 50 51 125 65 125) 123 92)
(setq n -1)
(mapcar '(lambda (x)
(setq n (1+ n))
(if (equal x char)
(setq poslst (cons n poslst))
)
)
lst
)
(setq poslst (reverse poslst))
;;;(sn:leftnthlst x lst)
(mapcar '(lambda (x / end n0)
(setq n0 0
end nil
)
(mapcar '(lambda (y)
(if (and (equal beforechar y) (null end))
(setq n0 (1+ n0))
(setq end T)
)
)
(reverse (sn:leftnthlst x lst))
)
(cons x n0)
)
poslst
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun makesureispurechar
(strlst char firstorlast num / tmplst end value)
;;; 查找纯字符仅判断strlst里的firstorlast=T为第一个,firstorlast=nil为最后一个
;;; num=0时条件:前无92或有偶数个92 ;num=1时条件:前有奇数个92
;;;
(setq tmplst (listposandnumber strlst char 92))
(mapcar '(lambda (x)
(if (and (equal num (rem (cdr x) 2)) (null end))
(progn (setq value (car x)) (setq end T))
)
)
(if firstorlast
tmplst
(reverse tmplst)
)
)
value
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun removeitem (lst / tmplst n tmp nlst end ne)
(mapcar
'(lambda (x)
(while (setq n (MAKESUREISPURECHAR lst x T 1))
(setq lst (sn:nthremove (1- n) (sn:nthremove n lst)))
)
)
(mapcar 'ascii (list "O" "o" "L" "l" "~" "P"))
)
(mapcar
'(lambda (x)
(while (and (member x lst)
(setq n (MAKESUREISPURECHAR lst x T 1))
(setq ne (MAKESUREISPURECHAR
(sn:rightnthlst (1+ n) lst)
(ascii ";")
T
0
)
)
)
(repeat (+ 2 ne)
(setq lst (sn:nthremove (1- n) lst))
)
)
)
(mapcar 'ascii (list "f" "F" "C" "H" "T" "Q" "W" "A"))
)
lst
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun filterMtext (str / lst leftlst midlst
rightlst leftpos rightpos tmp n
ne
)
(setq lst (vl-string->list str))
(while (and (setq leftpos (MAKESUREISPURECHAR lst 123 nil 0))
(setq tmp (MAKESUREISPURECHAR
(sn:rightnthlst (1+ leftpos) lst)
125
T
0
)
)
(setq rightpos (+ leftpos tmp))
)
(setq leftlst (sn:leftnthlst leftpos lst))
(setq rightlst (sn:rightnthlst (+ 2 rightpos) lst))
(setq midlst (sn:leftnthlst
(1- tmp)
(sn:rightnthlst (+ 2 leftpos) lst)
)
)
(setq midlst (removeitem midlst))
(setq lst (append leftlst midlst rightlst))
)
(mapcar
'(lambda (x)
(while (and (member x lst)
(setq n (MAKESUREISPURECHAR lst x T 1))
(setq ne (MAKESUREISPURECHAR
(sn:rightnthlst (1+ n) lst)
(ascii ";")
T
0
)
)
)
(setq lst (sn:nthremove (+ ne n) lst))
(setq lst (sn:nthremove (1- n) (sn:nthremove n lst)))
)
)
(mapcar 'ascii (list "S"))
)
(mapcar
'(lambda (x)
(while (and (member x lst)
(setq n (MAKESUREISPURECHAR lst x T 1))
(setq ne (MAKESUREISPURECHAR
(sn:rightnthlst (1+ n) lst)
(ascii ";")
T
0
)
)
)
(repeat (+ 2 ne)
(setq lst (sn:nthremove (1- n) lst))
)
)
)
(mapcar 'ascii (list "f" "F" "C" "H" "T" "Q" "W" "A"))
)
(mapcar
'(lambda (x)
(while (setq n (MAKESUREISPURECHAR lst x T 1))
(setq lst (sn:nthremove (1- n) (sn:nthremove n lst)))
)
)
(mapcar 'ascii (list "P"))
)
(vl-list->string lst)
)

路过

雷人
2

握手

鲜花

鸡蛋

刚表态过的朋友 (2 人)

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-29 17:58 , Processed in 0.366730 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部