jaminth 发表于 2008-2-17 15:18:00

再次求助怎么分离数字与符号?

<p>设一变量</p><p>(setq all "456.23(t5)")</p><p>我想要的结果是得到两得变量:</p><p>(setq sz 456.23)</p><p>(setq wz "(t5)")</p><p>过程是想让456.23加上一个数,比如25.366,等于481.60,然后替换原来的变量all</p><p>即最后的结果是(setq all "481.60(t5)")!</p><p>论坛两位版主曾给小弟指引,也提过"正则表达式".可小弟就是不太懂,弄了一、二天还是没弄好!!!!</p>

zongsheng131 发表于 2008-2-17 21:46:00

菜鸟的想法

(setq all "456.23(t5)")
(setq n (strlen all))
(setq sz (atof (substr all 1 (- n 4))))
(setq sz (rtos (+ sz 25.366) 2))
(setq wz (substr all (- n 3) 4))
(setq all (strcat sz wz))

jaminth 发表于 2008-2-18 08:03:00

<p>假如(setq all "456.23(t5)")变成</p><p>(setq all "45.11123(t252222)")呢?</p><p>2楼的程序不适用于多种情况!?</p><p></p>

王咣生 发表于 2008-2-18 08:47:00

<p>以括号"("的位置为界截取吧,</p><p>不知道你处理的字符串有多少种情况,总之要以你的实际情况而定,谁也不好猜测:</p><p>比如你现在的字符是"45.11123(t252222)",也许还会是"45.11123"或"45.11123&lt;tt252222&gt;"等。</p>

jaminth 发表于 2008-2-18 13:19:00

<p>谢谢各位...我放弃编这个lisp.</p><p>因为多种情况,,按照目前多位版主的解决思路,,,我想要真正解决这个问题..应该有点难度了...</p>

zongsheng131 发表于 2008-2-18 19:29:00

<p>确实,想编个专用的还可以,想编个通用的就困难了.</p>

无痕 发表于 2008-2-18 22:15:00

正则表达式,很好很强大!

jaminth 发表于 2008-2-18 22:24:00

本帖最后由 作者 于 2008-2-18 22:28:48 编辑 <br /><br /> <p>无痕斑主,能不能用正则表达式帮一下忙:</p><p>我给出三种情况:----------------分离结果:</p><p>(setq all "125.36(T5)")--------(setq sz "125.36");(setq wz "(T5)")</p><p>(setq all "585.360052")---(setq sz "585.360052");(setq wz "")</p><p>(setq all "{T8}125.36&lt;T5&gt;")--(setq sz "125.36");(setq wz1 "{T8}");</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;(setq wz2 "&lt;T5&gt;");</p><p></p>

cnks 发表于 2008-2-18 22:44:00

搜索一下正则,按照例子应该能搞定

brainstorm 发表于 2008-2-19 12:21:00

<p>(defun zgx-find-num (str lst1 / rtn-str rtn-str1 lst) ;rtn-str)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq rtn-str ""<br/>&nbsp;&nbsp;&nbsp; rtn-str1 ""<br/>&nbsp;&nbsp;&nbsp; lst nil<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (while (/= str "")<br/>&nbsp;&nbsp;(if (zgx-singlestr-if-num (zgx-substr str 1 1) lst1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;(setq rtn-str (strcat rtn-str<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 2 -1)<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;(while<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-singlestr-if-num (zgx-substr str 1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lst1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq rtn-str (strcat rtn-str<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 2 -1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;(setq lst (append lst (list rtn-str)))<br/>&nbsp;&nbsp;&nbsp;(setq rtn-str "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;(setq rtn-str1 (zgx-substr str 1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 2 -1)<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;(while<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (and<br/>&nbsp;&nbsp;&nbsp;&nbsp;(not (zgx-singlestr-if-num<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lst1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;(/= str "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq rtn-str1 (strcat rtn-str1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (zgx-substr str 2 -1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;(setq lst (append lst (list rtn-str1)))<br/>&nbsp;&nbsp;&nbsp;(setq rtn-str1 "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; lst<br/>&nbsp;)<br/>&nbsp;;;-----判断是否为英文字符----------------<br/>&nbsp;(defun zgx-singlestr-if-letter (str)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if&nbsp;(wcmatch str (strcat str "*"))<br/>&nbsp;&nbsp;t<br/>&nbsp;&nbsp;nil<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;)<br/>;;;-----判断单个字母是否为数字,lst ( "+" ".") 需要当作数字处理的符号------<br/>&nbsp;(defun zgx-singlestr-if-num (str lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if&nbsp;(or<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (wcmatch str "#")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (member str lst)<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;t<br/>&nbsp;&nbsp;nil<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;)<br/>;;;---判断整个单词是否为数字,lst ( "+" ".") 需要当作数字处理的符号----------<br/>&nbsp;(defun zgx-wholestr-if-num (str lst / yes)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq yes t)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (while (and<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (/= "" str)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yes<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;(if (zgx-singlestr-if-num (zgx-substr str 1 1) lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq str (zgx-substr str 2 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq yes nil)<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; yes<br/>&nbsp;)<br/>&nbsp;;;------字符串长度,汉字按一个字符计算------------------<br/>&nbsp;(defun zgx-strlen (str / m n)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq m 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (while (/= str "")<br/>&nbsp;&nbsp;(if (zgx-singlestr-if-letter (substr str 1 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq n 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq n 2)<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;(setq str (substr str (+ 1 n)))<br/>&nbsp;&nbsp;(setq m (1+ m))<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; m<br/>&nbsp;)<br/>&nbsp;;;-------取代substr,汉字按一个字符计算,n&lt;0 则substr str m,否则substr m n-----------------<br/>&nbsp;(defun zgx-substr (str m n / mm nn teststr kk str1)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (if&nbsp;(= m 0)<br/>&nbsp;&nbsp;(setq str1 str)<br/>&nbsp;&nbsp;(progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq mm 0<br/>&nbsp;&nbsp;&nbsp;&nbsp; nn 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat (- m 1)<br/>&nbsp;&nbsp;&nbsp;(if (and<br/>&nbsp;&nbsp;&nbsp;&nbsp;str<br/>&nbsp;&nbsp;&nbsp;&nbsp;(/= "" str)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq teststr (substr str 1 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(if (zgx-singlestr-if-letter teststr)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq kk 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq kk 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq mm (+ mm kk))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq str (substr str (1+ kk)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq str1 str)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat n<br/>&nbsp;&nbsp;&nbsp;(if (and<br/>&nbsp;&nbsp;&nbsp;&nbsp;str<br/>&nbsp;&nbsp;&nbsp;&nbsp;(/= "" str)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq teststr (substr str 1 1))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(if (zgx-singlestr-if-letter teststr)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq kk 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq kk 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq nn (+ nn kk))<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq str (substr str (1+ kk)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if&nbsp;(&gt;= n 0)<br/>&nbsp;&nbsp;&nbsp;(substr str1 1 nn)<br/>&nbsp;&nbsp;&nbsp;(substr str1 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</p><p>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;)</p>
页: [1] 2
查看完整版本: 再次求助怎么分离数字与符号?