将文字、数字、字母分解成表
本帖最后由 CAD智能@未来 于 2024-9-27 09:35 编辑将文字、数字、字母分解成表
(CSY:String:Spl“明经CAD论坛”)
输出:("明" "经" "C" "A" "D" "论" "坛")
(CSY:String:Spl2"明经CAD论坛")
输出:("明经" "CAD" "论坛")(defun CSY:String:Spl (str / lst rslt x)
(setq lst(vl-string->list str))
(setq rslt nil)
(while (setq x (car lst))
(if (<= x 127)
(setq rslt (cons (vl-list->string (list x)) rslt))
(progn
(setq rslt (cons (vl-list->string (list x (cadr lst))) rslt))
(setq lst (cdr lst))
)
)
(setq lst (cdr lst))
)
(reverse rslt)
)
(defun CSY:String:Spl2 (str / lst rslt str_lst x mart)
(setq lst(vl-string->list str))
(setq str_lst nil)
(setq rslt nil)
(if (<= (car lst) 127)
(setq mart 0)
(setq mart 1)
)
(while (setq x (car lst))
(cond
((and (<= x 127) (= mart 0))
(setq str_lst (cons x str_lst))
)
((and (<= x 127) (= mart 1))
(setq rslt (cons (vl-list->string (reverse str_lst)) rslt))
(setq str_lst (list x))
(setq mart 0)
)
((and (> x 127) (= mart 0))
(setq rslt (cons (vl-list->string (reverse str_lst)) rslt))
(setq str_lst (list x))
(setq mart 1)
)
((and (> x 127) (= mart 1))
(setq str_lst (cons x str_lst))
)
(t
)
)
(setq lst (cdr lst))
)
(reverse (cons (vl-list->string (reverse str_lst)) rslt))
)
jinan1913 发表于 2024-8-28 09:23
最后是汉字好像有BUG。
(CSY:String:Spl“明经CAD论坛”)
("明" "经" "C" "A" "D" "论")
没注意,感谢指正,已更新代码 本帖最后由 CAD智能@未来 于 2024-8-23 09:19 编辑
muai2010 发表于 2024-8-21 20:50
(CSY:String:Spl“明经** CAD *论坛”)
("明经" "CAD" " 论坛")能否输出这样的,三个字符中间有空格 ...
你说这个可以在表循环的时候做一个ASCII值的标记(如同为数字、字母、文字等),后续元素与标记一致,就将元素都加入lst1中,若不一致,将标记更新后将lst1转成字符后加入到LST中,并将lst1重置,添加新元素,依次循环即可,其实这个函数功能很简单,主要还是分享思路,想要的组合都可以利用ascii不同的值代表不同的含义(数字或是字母文字)任意组合,也可以利用这个特点做字母递增的函数。
一、ASCII 值的基本范围及用途
ASCII 值 0 - 31:
通常为控制字符,如换行符(10)、回车符(13)等,一般不会直接显示在图形中,主要用于控制数据的传输和处理。
ASCII 值 32 - 126:
包括常见的可打印字符,如数字、字母、标点符号等。这些字符可以在 CAD 中的文本注释、尺寸标注等地方使用。
例如,数字 0 - 9 用于表示数值;字母用于标注名称、说明等。
ASCII 值 127 及以上:
通常包括一些扩展字符和特殊字符,在 CAD 中可能会被识别为特定的文字符号或编码,具体含义取决于 CAD 软件的字符集设置和使用的字体。
例如,一些特殊符号、国际字符等可能在这个范围内。 muai2010 发表于 2024-8-21 20:50
(CSY:String:Spl“明经** CAD *论坛”)
("明经" "CAD" " 论坛")能否输出这样的,三个字符中间有空格 ...
加载函数
(progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
这个程序好,当有中英混合的时候先转成表处理方便很多,直接取字符串,如果截取的位置刚好是文字容易乱码 (CSY:String:Spl“明经** CAD *论坛”)
("明经" "CAD" " 论坛")能否输出这样的,三个字符中间有空格,如果字符有*则表示为空格 vitalgg 发表于 2024-8-21 21:54
加载函数
感谢分享,棒 CAD智能@未来 发表于 2024-8-22 14:08
你说这个可以在表循环的时候做一个ASCII值的标记(如同为数字、字母、文字等),后续元素与标记一致,就 ...
受教了,好复杂啊,哈哈 谢谢老师的好程序 muai2010 发表于 2024-8-22 15:29
受教了,好复杂啊,哈哈
其实也可以在这里下载Gu_xl版主的API ,用API里面的函数,
(XLRX-String-SplitByChEn "dg斯蒂12芬")
返回'("dg" "斯蒂" "12" "芬")
网址:http://bbs.mjtd.com/thread-113010-1-1.html CAD智能@未来 发表于 2024-8-24 22:23
其实也可以在这里下载Gu_xl版主的API ,用API里面的函数,
(XLRX-String-SplitByChEn "dg斯蒂12芬")
...
3Q谢谢
页:
[1]
2