明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1609|回复: 8

[LISP]关于字符串的问题?

[复制链接]
发表于 2005-3-3 12:32:00 | 显示全部楼层 |阅读模式
最近想写一个内差计算函数,因为用到字符串输入,但是提取的时候却有问题了,比如原始文件中:“10                                                 2.3”,用read-line能把它读出来,然后可以用read函数把前面一个数提取出来,可是后面的数呢,有没有一个函数能做到的,特请教高手。
发表于 2005-3-3 12:40:00 | 显示全部楼层
试试这个 (defun str2no (str / ll nn ss)
(setq nn "" ss "")
(repeat (strlen str)
(setq s (substr str 1 1))
(if (or (= (ascii s) 46)(wcmatch s "#"))
(setq nn (strcat nn s)
ll (append ll (list ss))
ss "")
(setq ss (strcat ss s)
ll (append ll (list nn))
nn "")
)
(setq str (substr str 2))
)
(setq ll (vl-remove "" ll))
(if (/= nn "")(setq ll (append ll (list nn))))
(if (/= ss "")(setq ll (append ll (list ss))))
ll
)
发表于 2005-3-3 12:45:00 | 显示全部楼层
(setq EE "10 2.3")
(setq EE (strcat "(" EE ")"))
(setq EE (read EE))
 楼主| 发表于 2005-3-4 13:39:00 | 显示全部楼层
谢谢二位的回复,二楼的好像太复杂了,而三楼的不能达到我所要求的目的,其实我已经写了一个子程序来实现我的功能,只是觉得太麻烦了,所以才来和大家探讨一下,现在拿出来与大家研究一下: (defun aa()

(setq a1 (read a))
(setq n (strlen a))
(setq m 1)
(while (<= m n)
(if (= (substr a m 1) " ")
(progn
(setq a2 (read (substr a m)))
(setq m (+ n 1)))
(setq m (+ m 1))
))

) 其中变量a就是那个字符串
发表于 2005-3-4 15:18:00 | 显示全部楼层
3楼的达不到你的要求?你试了没有? (setq EE "10 2.3")
(setq EE (strcat "(" EE ")")) ;得到EE为"(10 2.3)"
(setq EE (read EE)) ;得到EE为 (10 2.3) 都得到一个表了,你要哪个数字还不会取吗???
 楼主| 发表于 2005-3-4 17:17:00 | 显示全部楼层
呵呵,谢谢五楼的,没有想到这种思路,长见识了,这种方法比我想的还要好,感谢了。
发表于 2005-3-4 18:54:00 | 显示全部楼层
昏倒
发表于 2005-3-5 08:29:00 | 显示全部楼层
就是,弄清别人回帖子意图了再说也不迟。
发表于 2005-3-14 19:02:00 | 显示全部楼层
不好意思我还以为你要这样的 命令: (setq ee "10 adf234 dsa 45 2.3")
"10 adf234 dsa 45 2.3" 命令: (str2no ee)
("10" " adf" "234" " dsa " "45" " " "2.3")
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-28 00:50 , Processed in 0.219452 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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