- 积分
- 9150
- 明经币
- 个
- 注册时间
- 2004-12-3
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
在明经以前有个函数 可以实现,将字符串按特定字符转换为表,函数如下:
;;; 解析字符串为表(函数来自明经通道转载)
;;; ---------------------------------------------------------------------------------
(defun strParse (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))
) ;_ end of while
(setq return
(cons
(substr SearchStr
1
(1- n))
return))
(setq SearchStr
(substr SearchStr
(1+ n)
StringLen))
(setq StringLen
(strlen SearchStr))
) ;_ end of while
(reverse return)
) ;_ end of defun
这个在秋枫大侠的 LISP安装制作程序中文有个lisp文件引用了这个函数,
我在借用这个LISP文件的时候发现,用来制作2010版本的安装文件,
当支持文件夹有中文目录的时候,解析出来的表有问题,中文目录就那么悄悄的溜走了
我做了入下修改:
;;; 解析字符串为表(修改后)
;;; ---------------------------------------------------------------------------------
(defun strParse (Str Delimiter
/ SearchStr
StringLen return
n char)
(setq SearchStr Str)
(setq StringLen (strlen SearchStr))
(setq return '())
(while (> StringLen 0)
(setq n (vl-string-search Delimiter SearchStr))
(setq return (cons (substr SearchStr 1 n ) return))
( IF(> StringLen (+ n 2) )
(PROGN
(setq SearchStr (substr SearchStr (+ n 2) StringLen))
(setq StringLen (strlen SearchStr))
)
(setq StringLen 0)
)
) ;_ end of while
(reverse return) ;将表的元素顺序倒置后返回
) ;_ end of defun
|
|