CAD智能@未来 发表于 2024-8-21 16:08:38

将文字、数字、字母分解成表

本帖最后由 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))
)

CAD智能@未来 发表于 2024-8-29 09:47:10

jinan1913 发表于 2024-8-28 09:23
最后是汉字好像有BUG。
(CSY:String:Spl“明经CAD论坛”)
("明" "经" "C" "A" "D" "论")


没注意,感谢指正,已更新代码

CAD智能@未来 发表于 2024-8-22 14:08:35

本帖最后由 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 软件的字符集设置和使用的字体。
例如,一些特殊符号、国际字符等可能在这个范围内。

vitalgg 发表于 2024-8-21 21:54:33

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))))

Klein 发表于 2024-8-21 16:59:52

这个程序好,当有中英混合的时候先转成表处理方便很多,直接取字符串,如果截取的位置刚好是文字容易乱码

muai2010 发表于 2024-8-21 20:50:55

(CSY:String:Spl“明经** CAD *论坛”)
("明经" "CAD" " 论坛")能否输出这样的,三个字符中间有空格,如果字符有*则表示为空格

muai2010 发表于 2024-8-21 22:59:57

vitalgg 发表于 2024-8-21 21:54
加载函数

感谢分享,棒

muai2010 发表于 2024-8-22 15:29:33

CAD智能@未来 发表于 2024-8-22 14:08
你说这个可以在表循环的时候做一个ASCII值的标记(如同为数字、字母、文字等),后续元素与标记一致,就 ...

受教了,好复杂啊,哈哈

ynhh 发表于 2024-8-22 18:06:15

谢谢老师的好程序

CAD智能@未来 发表于 2024-8-24 22:23:55

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

muai2010 发表于 2024-8-24 23:09:09

CAD智能@未来 发表于 2024-8-24 22:23
其实也可以在这里下载Gu_xl版主的API ,用API里面的函数,
(XLRX-String-SplitByChEn "dg斯蒂12芬")
   ...

3Q谢谢
页: [1] 2
查看完整版本: 将文字、数字、字母分解成表