创建支持数量的过滤规则
本帖最后由 tryhi 于 2021-6-10 16:14 编辑其实这个好几年就写了,之前只在明经群里发过,但是感觉好像用得比较少,由于用得很少,所以不知道有没有可能有BUG,欢迎各位找BUG或者直接优化
这个题目不知道怎么写好
假设我们需要做一个ssget,框选的文字是这样的规则
前面2-5个数字,然后一个小数点,后面1-2个数字,然后一个括号里面1-3个数字
如图,此时ssget写规则就显得有点力不从心了
https://www.hualigs.cn/image/60c0877553f5b.jpg
此函数正是在这种情况下诞生,创建的规则同样支持wcmatch使用
创建过滤规则,支持数量(作者:tryhi-大海)
例子:选择前面2-5个数字,然后一个小数点,后面1-2个数字,然后一个括号里面1-3个数字
(ssget (list (cons 1 (try-wcmatch-N "#{2,5}`.#{1,2}(#{1,3})"))))
既然用得不多,为啥还要单独写一个那么复杂的呢?
(defun ss:n ()
(setq aa '("##." "###." "####." "#####."))
(setq bb '("#" "##"))
(setq cc '("(#)" "(##)" "(###)"))
(setq n1 (zuhe aa (zuhe bb cc)))
(setq n2 (mapcar '(lambda (x) (apply 'strcat x)) n1))
(ssget (list (cons 1 (strjoin n2 ","))))
)
;;;字符串连接
(defun strjoin (lst del)
(if (cdr lst)
(strcat (car lst) del (strjoin (cdr lst) del))
(car lst)
)
)
;;;两个表两两组合成新表
(defun zuhe (lst1 lst2 / i j a lst)
(setq i 0)
(repeat (length lst1)
(setq a (nth i lst1))
(if (atom a)(setq a (cons a nil)))
(setq j 0)
(repeat (length lst2)
(setq b (nth j lst2))
(if (atom b)(setq b (cons b nil)))
(setq lst
(append
lst
(list(append a b))
)
)
(setq j (1+ j))
)
(setq i (1+ i))
)
Lst
)
本帖最后由 tryhi 于 2021-6-12 16:19 编辑
菜卷鱼 发表于 2021-6-11 16:12
既然用得不多,为啥还要单独写一个那么复杂的呢?
用得不多这个没想到,当初的想法是直接代替的,但是由于变量无法用单引号,导致每次写ssget的时候就要list cons一堆,又觉得麻烦
就像我定义try-sort一样,就是完全替代掉sort,只是当时没想到每次都要写list+cons就觉得好麻烦,就用得特别少了,不过也可以发散一下,直接重定义ssget
由于可能用得上,所以写了,由于比较难写,所以写了好几年了,由于写了好几年心里没底,所以用得比较少,由于用得少,所以不知道有没有BUG,由于想找bug,所以发一贴,由于发帖了,所以大家可能用得上,循环到头部,over…… 海哥你就是我心中的大神 海哥你就是我心中的大神+1 好像不能属性块文字,模糊搜索吧,能支持就完美 厉害ssget玩出花来
海哥你就是我心中的大神+2 高手好像不能属性块文字,模糊搜索吧,能支持就完美 这个能玩出花样来 不错:lol 给力 还能这样玩
页:
[1]
2