AutoLISP拆分逗号分割的字符串,不使用split-string
时间: 2024-02-20 10:01:07 浏览: 20
要拆分逗号分割的字符串,可以使用 AutoLISP 中的字符串函数和循环语句来实现。
以下是一个示例函数,它将接受一个逗号分隔的字符串作为输入,并将其拆分成一个字符串列表:
```
(defun split-string (str / result temp)
(setq result '())
(setq temp "")
(foreach char (vl-string->list str)
(if (= char ",")
(progn
(setq result (append result (list temp)))
(setq temp ""))
(setq temp (strcat temp (char))))
)
(setq result (append result (list temp)))
result
)
```
该函数首先定义了两个变量:`result` 和 `temp`。`result` 用于存储拆分后的字符串列表,`temp` 用于存储正在构建的当前字符串。
然后,使用 `vl-string->list` 函数将输入字符串转换为字符列表。然后,使用 `foreach` 循环遍历字符列表中的每个字符。
如果当前字符是逗号,则将 `temp` 添加到 `result` 列表中,并将 `temp` 重置为空字符串。否则,将当前字符附加到 `temp` 中。
最后,将 `temp` 添加到 `result` 列表中,并返回结果列表。
相关问题
AutoLISP拆分逗号分割的字符串
在 AutoLISP 中,可以使用 `split-string` 函数将一个字符串按照指定的分隔符进行拆分。以下是一个示例代码,可以拆分逗号分隔的字符串:
```
(setq str "1,2,3,4,5")
(setq lst (split-string str ","))
(foreach item lst
(princ item)
(princ)
)
```
这个代码中,`split-string` 函数将字符串 `"1,2,3,4,5"` 按照逗号 `,` 进行拆分,并将拆分后的结果存储在一个列表 `lst` 中。然后,使用 `foreach` 循环遍历 `lst` 列表,并将每个元素输出到 AutoCAD 命令行窗口中。
如果您的字符串中包含其他的分隔符,可以将分隔符作为 `split-string` 函数的第二个参数进行指定。例如,如果您的字符串中包含空格和逗号两种分隔符,可以使用以下代码进行拆分:
```
(setq str "1, 2, 3, 4, 5")
(setq lst (split-string str "[, ]+"))
(foreach item lst
(princ item)
(princ)
)
```
这个代码中,`split-string` 函数的第二个参数使用了一个正则表达式 `"[, ]+"`,表示逗号和空格都可以作为分隔符,并且可以出现一次或多次。
autolisp提取字符串中数字
在AutoLISP中,要提取字符串中的数字可以使用正则表达式或字符串函数的组合来实现。
一种方法是使用正则表达式函数(regexp)来查找和提取字符串中的数字。我们可以使用正则表达式模式([0-9]+)来匹配一个或多个数字,并使用(regexp-match)函数来获取匹配的结果。例如:
```
(setq str "abc123def456ghi")
;; 使用正则表达式提取字符串中的数字
(setq matches (regexp-match "[0-9]+" str))
;; 输出匹配到的结果
(if matches
(progn
(setq numStr (car matches))
(setq num (atoi numStr))
(princ (strcat "提取到的数字是:" numStr))
(terpri)
(princ (strcat "转换后的数字是:" (itoa num))))
(princ "未匹配到数字"))
```
另一种方法是使用字符串函数,如(ascii)和(stringp)来逐个检查字符串中的字符,并将数字字符拼接成一个新的字符串。例如:
```
(setq str "abc123def456ghi")
(setq numStr "")
;; 逐个检查字符串中的字符,拼接数字字符到新的字符串
(foreach char (vl-string->list str)
(if (and (>= (ascii char) 48) (<= (ascii char) 57))
(setq numStr (strcat numStr (str char)))))
;; 输出提取到的数字字符串
(if (not (stringp numStr))
(princ "未提取到数字")
(princ (strcat "提取到的数字是:" numStr)))
```
这两种方法都可以用来提取字符串中的数字,具体选择哪种方法取决于个人的喜好和实际情况。