明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4801|回复: 16

[基础] 求助:有没有函数方便地将字符串分割

  [复制链接]
发表于 2011-4-29 18:35 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2011-4-29 18:42 编辑

有没有函数方便地将字符串分割,比如"名称   重量  数量", 分割后列成表("名称"  "重量 "  " 数量")
如果有这样的一个函数存在,那么存放数据的文件(用如下函数)就相当简单了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2019-2-3 13:12 | 显示全部楼层
highflybird 发表于 2011-4-29 19:12
_$ (setq str "名称   重量  数量")
"名称   重量  数量"
_$ (setq str (STRCAT "(" str ")"))

用这个方法汉字中有小数点会出错这个是read函数的问题,例如:
命令: (READ (A.B))
; 错误: no function definition: A

发表于 2011-4-29 19:12 | 显示全部楼层
_$ (setq str "名称   重量  数量")
"名称   重量  数量"
_$ (setq str (STRCAT "(" str ")"))
"(名称   重量  数量)"
_$ (setq lst (read str))
(名称 重量 数量)
_$ (setq lst (mapcar 'VL-PRINC-TO-STRING lst))
("名称" "重量" "数量")
 楼主| 发表于 2011-4-29 19:40 | 显示全部楼层
;;;谢谢版主highflybird,有了这样的函数,放数据的.text文件就简单多了
;;;highflybird真是高手呀!!!就这么几句就搞定了。
(defun strinSplit (str / lst)
(setq str (STRCAT "(" str ")"))
(setq lst (read str))
(setq lst (mapcar 'VL-PRINC-TO-STRING lst))
)
 楼主| 发表于 2011-4-29 20:09 | 显示全部楼层
;;;我原来看过一本书,编程时存放数据如下,又是加括号,又是加引号,麻烦呀!
(        "DTII04C0532"        43.6        )
;;;有了版主highflybird的分割方法,存放数据完全可以如下,就方便多了。
DTII04C0532        43.6
发表于 2011-4-29 23:11 | 显示全部楼层
本帖最后由 jh1005 于 2013-7-27 20:33 编辑

类似的函数:
  1. ;by fsxm
  2. ;用分隔符解释字符串成表
  3. (defun fsxm-Split (string strkey / po strlst xlen)
  4.   (setq xlen (1+ (strlen strkey)))
  5.   (while (setq po (vl-string-search strkey string))
  6.     (setq strlst (cons (substr string 1 po) strlst))
  7.     (setq string (substr string (+ po xlen)))
  8.   )
  9.   (reverse (cons string strlst))
  10. )

发表于 2011-5-2 12:28 | 显示全部楼层
jh1005 发表于 2011-4-29 23:11
在个类似的函数:

感謝 JH1005 提供源碼
但如果 (fsxm-Split  "123我最帥"  "")
將會出問題!
发表于 2011-5-2 22:30 | 显示全部楼层
pizg 发表于 2011-5-2 12:28
感謝 JH1005 提供源碼
但如果 (fsxm-Split  "123我最帥"  "")
將會出問題!

另一个版本,明经函数库里的:
http://www.mjtd.com/function/alisp/053.htm
发表于 2011-5-2 22:39 | 显示全部楼层
本帖最后由 qjchen 于 2011-5-2 22:45 编辑

Highflybird版主的是好方法:)

以前编写过一个如下的函数,用于 分割字符串的
http://www.mjtd.com/function/alisp/053.htm
的不同之处,是可以同时处理 多个作为分割的字符,如",;"

  1. ;;;;字符串函数
  2. ;;;;str是准备被处理的字符串,delim是一个字符串集合,其中的每一个字符都会被
  3. ;;;;当作是分割符号
  4. ;;;;如 (q:str:delim "25 35 45 ; 55, 66 " " ;")=> ("25" "35" "45" "55," "66")
  5. ;;;by qjchen@gmail.com
  6. (defun q:str:delim(str delim / l1 l2)
  7.   (setq str (vl-string->list str) delim (vl-string->list delim))
  8.   (while str
  9.     (if (not (member (car str) delim))
  10.              (setq l1 (cons (car str) l1))
  11.              (if l1 (setq l2 (cons (vl-list->string (reverse l1)) l2) l1 nil))
  12.     )
  13.     (setq str (cdr str))
  14.   )
  15.   (if l1 (setq l2 (cons (vl-list->string (reverse l1)) l2)))
  16.   (reverse l2)
  17. )

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1

查看全部评分

发表于 2011-5-5 11:45 | 显示全部楼层
虽然有点晚,但是可以提个方向用正则应该也可以做到
发表于 2011-5-5 12:04 | 显示全部楼层
本帖最后由 highflybird 于 2011-5-5 12:10 编辑

这样也很简单: 可以处理各种字符和多个字符作分割串的。

  1. (defun Split (String Delimiter / str lst)
  2.   (setq str (VL-STRING-TRANSLATE  Delimiter " " String))        ;首先替换
  3.   (setq str (strcat "(" str ")"))                                                  ;然后加括号
  4.   (setq lst (read str))                                                               ;读
  5.   (setq lst (mapcar 'VL-PRINC-TO-STRING lst))                        ;转化
  6. )


点评

(split "AB#C 1#12 *#j6" "#") 返回("AB" "C" "1" "12" "*" "J6"),原希望是("AB" "C 1" "12 *" "j6") 该程序对原有空格的字符串出错   发表于 2012-4-3 11:39
嘿嘿,一个字" 发表于 2011-5-5 20:44
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-9 22:00 , Processed in 0.208655 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表