xiaocainiao 发表于 2023-3-7 11:01:29

使用wcmatch判断中文报错

(Faith-string->num "节点01")
(defun Faith-string->num (str / num1)
(setq str (vl-list->string (reverse (vl-string->list str)))
    num1 ""
)
(while (wcmatch (substr str 1 1) "")
    (setq num1 (strcat (substr str 1 1) num1)
      str (substr str 2)
    )
)
(list (vl-list->string (reverse (vl-string->list str))) (atoi num1) (strlen num1))
)
请教论坛的各位大神、上面的代码用wcmatch判断中文时总是报错和警告、
提示发生未知意外、应该如何处理啊?

wzg356 发表于 2023-3-7 11:01:30

本帖最后由 wzg356 于 2023-3-8 12:44 编辑

(defun aa(str / num n lst a)
(setq num "" n 0)
(setq lst(reverse(vl-string->list str)))
(while
      (member(setq a(car lst))(list 46 47 48 49 50 51 52 53 54 55 56 57))      
      (setq n(1+ n)
                num(strcat (chr a) num)
                lst(cdr lst)
      )
)
(list (substr str 1(- (strlen str) n)) (read num) n)
)


(defun aa (str / str1)
        (setq str1(vl-string-right-trim ".0123456789"str))
        (list str1(read(substr str(1+(strlen str1)))))
)


只有一个小数点的情况没排出

d1742647821 发表于 2023-3-7 11:16:57

函数要先defun再调用

xiaocainiao 发表于 2023-3-7 11:25:08

d1742647821 发表于 2023-3-7 11:16
函数要先defun再调用

顺序问题咱先不管他了、主要是程序问题

xyp1964 发表于 2023-3-7 11:30:15

xiaocainiao 发表于 2023-3-7 11:25
顺序问题咱先不管他了、主要是程序问题

先把目的说清楚

xiaocainiao 发表于 2023-3-7 11:38:38

xyp1964 发表于 2023-3-7 11:30
先把目的说清楚

目的就是执行时不报错、现在是大部分时候报错、偶尔可以用

xyp1964 发表于 2023-3-7 11:50:41

xiaocainiao 发表于 2023-3-7 11:38
目的就是执行时不报错、现在是大部分时候报错、偶尔可以用

(defun abc (str / lst a b)
;; (abc "节点01") → ("节点" "01")
(setq        lst (vl-string->list str)
        a   (vl-remove-if-not '(lambda (x) (> x 160)) lst)
        b   (vl-remove-if '(lambda (x) (> x 160)) lst)
)
(list (vl-list->string a) (vl-list->string b))
)

xiaocainiao 发表于 2023-3-7 11:57:40

xyp1964 发表于 2023-3-7 11:50
(defun abc (str / lst a b)
;; (abc "节点01") → ("节点" "01")
(setq        lst (vl-string->list str ...

谢谢院长、一会我试试

d1742647821 发表于 2023-3-7 12:02:14

xiaocainiao 发表于 2023-3-7 11:25
顺序问题咱先不管他了、主要是程序问题

我试了,把defun放前面不会报错

xiaocainiao 发表于 2023-3-7 12:11:08

xyp1964 发表于 2023-3-7 11:50
(defun abc (str / lst a b)
;; (abc "节点01") → ("节点" "01")
(setq        lst (vl-string->list str ...

谢谢院长、这个代码对于"节点01"这种的可以、但是“节点-01”的结果就不对了、我那个代码是“节点-01”结果正确、“节点01”会报错
页: [1] 2
查看完整版本: 使用wcmatch判断中文报错