最初由 JQKA 发布
[B]用lisp编程,如何将下例数值取出?
5-10-18,11-7-3,2-1-9
要求:将相同位置的数值放在同一集合。
如:5,11,2同一集合
18,3,9同一集合
望各位指点。 [/B] 
- ;;;==================================================================
- ;;; (strparse str delimiter)
- ;;; 将具有分隔符的字符串解析为列表
- ;;;------------------------------------------------------------------
- ;;; 参数:
- ;;; str 要解析的字符串
- ;;; delimiter 要搜索的分隔符
- ;;;------------------------------------------------------------------
- ;;; 返回:
- ;;; 一个字符串列表。
- ;;; 示例:
- ;;; (setq a "harp,guiness,black and tan")
- ;;; (strparse a ",")
- ;;; 返回:
- ;;; ("harp" "guiness" "black and tan")
- ;;;------------------------------------------------------------------
- ;;; 相关主题: (stringtolist)
- ;;;------------------------------------------------------------------
- (defun string_parse
- (str delimiter / searchstr stringlen return n char)
- (setq searchstr str)
- (setq stringlen (strlen searchstr))
- (setq return '())
- (while (> stringlen 0)
- (setq n 1)
- (setq char (substr searchstr 1 1))
- (while (and (/= char delimiter) (/= char ""))
- (setq n (1+ n))
- (setq char (substr searchstr n 1))
- )
- (setq return (cons (substr searchstr 1 (1- n)) return))
- (setq searchstr (substr searchstr (1+ n) stringlen))
- (setq stringlen (strlen searchstr))
- )
- (reverse return)
- )
- (defun test (strlst / strlst1)
- (setq strlst1 (mapcar '(lambda (x) (string_parse x "-")) strlst))
- (list (mapcar 'car strlst1)
- (mapcar 'cadr strlst1)
- (mapcar 'last strlst1)
- )
- )
测试:
_$ (test '("2-4-6" "4-6-7" "8-9-0"))
(("2" "4" "8") ("4" "6" "9") ("6" "7" "0"))
_$(mapcar '(lambda (x) (mapcar 'read x))
(test '("2-4-6" "4-6-7" "8-9-0"))
)
((2 4 8) (4 6 9) (6 7 0)) |