autolisp用substr截取汉字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了autolisp用substr截取汉字?相关的知识,希望对你有一定的参考价值。

autolisp用substr截取汉字出了点小问题。在CAD里直接在命令行里输入(substr "222图层" 4 7),得出结果正确,如图;如果使用加载命令加载这一段代码的lsp文件就出错,如图。

你这个问题应该是中文编码出现的问题;你要用vlisp编辑窗口打开代码后,看里面的字符串是不是乱码了,如果乱码了在编辑器里面重新输入一下就可以正常显示了追问

这样子是可以,但总不能每次加载后再打开编辑器再重输入呀,有没有办法一次搞定不乱码呀

追答

正常来讲你是用编辑窗口进行编辑的,但是你应该是用其它编辑器编辑好了,然后再加载的;你如果按正常的思路,在编辑器窗口编辑就不会有这个问题;我也是用其它编辑器编辑好,然后再到lisp编辑器里看一下,中文是不是有问题,有问题,就把代码全部复制粘贴,在编辑器里面覆盖粘贴一次就OK了,粘贴一下也不费事
如果想彻底解决第三方编辑器的问题,你可以去了解一下中文编码,一般第三方编辑器都会有编码方式的设置。

追问

我大概懂你的意思了,我这边代码是我在txt里拼凑出来的,拷过来的,我现在粘贴到编辑器里把中文改掉,然后是手动考出来还是可以另存为一个lsp文件呀?我手动考出来还是乱码的,这个编辑器我没用过(本人是小白),是不是要新建一个工程什么的才能保存呀

参考技术A 自定义一个判断汉字个数的函数,在判断就可以了
;(strnum "df的");返回结果---> 3
(defun strnum (str / i strx)
(if (= str "")
(setq i 0)
(progn
(setq i 0)
(setq strx (vl-string->list str))
(while
(if (< (car strx) 129)
(setq i (1+ i)
strx (cdr strx)
)
(setq i (1+ i)
strx (cddr strx)
)
)
)
)
)
i
)
参考技术B 1个文字占2个位置,数字字母占1个位置所以:
(substr "222图层" 4 7)跟(substr "222图层" 4 4)一样,返回:图层
(substr "222图层" 4 2)返回:图
(substr "222图层" 4 1)、(substr "222图层" 4 3)返回的后面那个字只有一半所以返回错误
(substr "222图层" 5 4)指针指向半个文字,所以返回错误
(substr "222图层" 6 4)返回:层

以上是关于autolisp用substr截取汉字?的主要内容,如果未能解决你的问题,请参考以下文章

php 怎么截取汉字字符串?

数字, 汉字 , 字符 ,混合截取

JS 截取字符串-全是干货

JAVA编写一个截取字符串的函数

PHP 截取字符串后乱码的解决方案

PHP怎么用substr函数截取字符串中的某部分