明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1737|回复: 5

[求助]分割字符串

[复制链接]
发表于 2008-8-13 11:58:00 | 显示全部楼层 |阅读模式

(defun c:tt ()
  (if (setq x (vlax-create-object "MSComDlg.CommonDialog"))
    (progn (vlax-put-property x "DialogTitle" "选择图形文件")
    (vlax-put-property x "Filename" "*.dwg")
    (vlax-put-property x "Filter" "*.dwg")
    (vlax-put-property x "MaxFileSize" 10000)
    ;; in lisp unbedingt notwendig, sonst kommt ne fehlermeldung von wegen zu wenig speicher
    (vlax-put-property x "Flags" 512) ;_ mehrer Dateien+explorer-design
    (vlax-put-property x "Action" 1) ;_ showopen-dialog 
    (setq str (vlax-get-property x "Filename"))
    )
  )
  (if (/= str "*.dwg")
    str
    nil
  )
  str
)

返回如:"F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg"


怎么样漂亮的转成
'("F:\\2008\\下湖\\1.dwg"
"F:\\2008\\下湖\\2.dwg"
"F:\\2008\\下湖\\3.dwg")

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2008-8-13 12:29:00 | 显示全部楼层

(setq str "F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg" files nil)
(setq path (strcat (vl-filename-directory  str) "\\"))
(setq bases (substr str (+ (strlen path) 2) (strlen str)))
(while (setq n (vl-string-position (ascii " ") bases))
  (setq file (substr bases 1 n))
  (setq bases (substr bases (+ n 2) (strlen bases)))
  (setq files (cons file files))
)
(setq file (substr bases 1 n))
(setq files (cons file files))
(reverse files)

返回:("1.dwg" "2.dwg" "3.dwg")

哪位来个漂亮一点的...也好收藏成通用函数

发表于 2008-8-13 17:28:00 | 显示全部楼层
(defun str2lst (str / i)
   (while (setq i (vl-string-search " " str (if i (+ 2 i) 0)))
     (setq str (vl-string-subst "\"\"" " " str i))
   )(read (strcat "(\"" str "\")"))
)
 楼主| 发表于 2008-8-14 08:58:00 | 显示全部楼层
本帖最后由 作者 于 2008-8-14 8:59:25 编辑

byghbcx

先谢谢。。。你的代码很漂亮,收藏先。

 楼主| 发表于 2008-8-14 09:03:00 | 显示全部楼层
这个是我找到的分割字符串的代码,跟大家分享
  1. ;;;(setq str "F:\\2008\\下湖\\ 1.dwg 2.dwg 3.dwg")
  2. ;;;(cjw-string-split str " ")
  3. ;;;("F:\\2008\\下湖\" "1.dwg" "2.dwg" "3.dwg")
  4. (defun cjw-string-split (str
  5.        delimiter
  6.        /
  7.        lenStr
  8.        lenDelimiter
  9.        start@
  10.        lstStr
  11.        done
  12.        find@
  13.       )
  14.   (setq lenStr      (strlen str)
  15. lenDelimiter (strlen delimiter)
  16. start@      0
  17. lstStr      nil
  18. done      nil
  19.   )
  20.   (while (and (not done) (<= (1+ start@) lenStr))
  21.     (if (setq find@ (vl-string-search delimiter str start@))
  22.       (setq lstStr (cons
  23.        (if (zerop find@)
  24.          ""
  25.          (substr str (1+ start@) (- find@ start@))
  26.        )
  27.        lstStr
  28.      )
  29.      start@ (+ find@ lenDelimiter)
  30.       )
  31.       (setq done   t
  32.      lstStr (cons (substr str (1+ start@)) lstStr)
  33.       )
  34.     )
  35.   )
  36.   (if (= start@ lenStr)
  37.     (setq lstStr (cons "" lstStr))
  38.   )
  39.   (reverse lstStr)
  40. )
发表于 2013-11-24 10:50:40 | 显示全部楼层
byghbcx 发表于 2008-8-13 17:28
(defun
        str2lst
        (str / i)&nbsp;&nbsp; (while

大哥,我想请问下这个函数我要怎么调用到分割带空格字符串程序里呢?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-26 03:02 , Processed in 0.176415 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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