明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3702|回复: 11

版主及各位高手,实用函数求助!

  [复制链接]
发表于 2002-7-22 10:16:00 | 显示全部楼层 |阅读模式
我在明经实用函数里找到一个如下函数,但不知为什么用不了?好象也是类似于上一次的问题,里面缺少其他辅助函数文件,能否帮忙补充一下?谢谢!
 楼主| 发表于 2002-7-22 10:43:00 | 显示全部楼层

哦,不好意思!忘了贴程序了!

里面的rat函数不知怎么写?
由全路径和文件名返回不带扩展名的文件名

  

;;;==================================================================
;;; (JustStem cFileName)
;;;                由全路径和文件名返回不带扩展名的文件名。
;;;------------------------------------------------------------------
;;; 参数:
;;;                cFileName                str 要检查的完整路径
;;;------------------------------------------------------------------
;;;        返回:
;;;                [STR]       
;;;                示例:         (setq a "C:\\MyFolder\\MyFile.txt")
;;;                                        (JustStem a) ; 返回 "MyFile"
;;;------------------------------------------------------------------
(defun JustStem        (cFileName / fName DotLoc)
        (setq fName (justFName cFileName))
        (setq DotLoc (rat "." fName))
        (if        (> DotLoc 0)
                (substr fName 1 (1- DotLoc))
                fName
        ) ;_ end of if
) ;_ end of defun
发表于 2002-7-22 12:33:00 | 显示全部楼层

(VL-FileName-Base“文件描述”)

发表于 2002-7-22 12:35:00 | 显示全部楼层

缺少的那个函数也在实用函数栏目中

http://www.mjtd.com/function/alisp/037.htm
 楼主| 发表于 2002-7-22 12:58:00 | 显示全部楼层

谢谢版主帮忙,已经OK了,我还有点小请求,能否只返回文件名,去掉扩展名呢?

 楼主| 发表于 2002-7-22 14:23:00 | 显示全部楼层

陈老师的意思是?

 楼主| 发表于 2002-7-22 16:06:00 | 显示全部楼层

版主,问题我已经解决了

程序是写完了,但实现的办法太笨拙了吧?

(defun c:nnn()
  (setq a "C:\\MyFolder\\MyFile.txt")
  (setq kk (JustFName a))
  (setq l (strlen kk))
  (setq ll (- l 4))
  (setq st (substr kk 1 ll))
  (setq dri (strcat "md " "f:\\mm\\" st))
  (md))
(defun JustFName (cFileName / bsLoc ColonLoc)
        ;; Check for BackSlash
        (setq bsLoc (rat "\\" cfileName))
        (if        (> bsLoc 0)
                (substr cFilename (1+ bsLoc))
                (progn
                        ;; 检查盘号 ":"
                        (setq ColonLoc (rat ":" cfileName))
                        (if        (> ColonLoc 0)
                                (substr cFilename (1+ ColonLoc))
                                cFileName
                        ) ;_ end of if
                ) ;_ end of progn
        ) ;_ end of if
) ;_ end of defun

;;;==================================================================
;;; (Rat cSearchExpression cExpressionSearched)
;;;                返回指定字符串出现在另一字符串最右边的位置的数字。
;;;------------------------------------------------------------------
;;; 参数:
;;;                cSearchExpression        [STR] - 要搜索的字符串
;;;                cExpressionSearched        [STR] - 被搜索的字符串
;;;------------------------------------------------------------------
;;;        返回:
;;;                [INT] - 字符串的位置
;;;                示例:         (setq a "A Lot of Text.")
;;;                                        (Rat "Text" a) ; 返回 10
;;;------------------------------------------------------------------
(defun Rat (cSearch cSearchIn / return SearchFor cont n)
        ;; 避开特殊字符
        (cond
                (
                 (= cSearch "\\")
                 (setq SearchFor "*`\\*")
                )
                (
                 (= cSearch ".")
                 (setq SearchFor "*`.*")
                )
                (
                 (= cSearch "#")
                 (setq SearchFor "*`#*")
                )
                (
                 (= cSearch "*")
                 (setq SearchFor "*`**")
                )
                (
                 (= cSearch "~")
                 (setq SearchFor "*`~*")
                )
                (
                 (= cSearch "-")
                 (setq SearchFor "*`-*")
                )
                (
                 (= cSearch ",")
                 (setq SearchFor "*`,*")
                )
                (
                 (= cSearch "`")
                 (setq SearchFor "*``*")
                )
                (

                 T
                 (setq SearchFor (strcat "*" cSearch "*"))
                )
        ) ;_ end of cond
       
        (cond
                (
                 ;; 确定是否匹配
                 (not (wcmatch cSearchIn SearchFor))
                 (setq return 0)
                )
                (
                 T
                 (setq n (strlen cSearchIn))
                 (setq TestStr (substr cSearchIn n))
                 (setq cont T)
                 (while        Cont
                         (if (wcmatch TestStr SearchFor)
                                 (progn
                                         (setq Cont nil)
                                         (setq return n)
                                 ) ;_ end of progn
                                 (progn
                                         (setq n (1- n))
                                         (setq TestStr (substr cSearchIn n))



                                 ) ;_ end of progn
                         ) ;_ end of if
                 ) ;_ end of while
                )
        ) ;_ end of cond
        return
) ;_ end of defun

(defun md()
  
  (command "sh" dri)
  )
发表于 2002-7-23 17:05:00 | 显示全部楼层

简化版!!

;;;FOR R14
;;;usage: (mm "c:\\file.txt")
;;;usage: (mm "c:\\folder")
(defun MM (A / N1 N2 N3 AA)
  (defun DO_IT (BB /)
    (setq N2 BB)
    (while (/= "\\" (substr A N2 1))
      (setq N2 (1- N2))
    )
    (setq AA (substr A (+ N2 1) (- BB N2)))
  )
  (setq N1 (strlen A))
  (setq N3 N1)
  (while (and (/= N1 0) (/= "." (substr A N1 1)))
    (setq N1 (1- N1))
  )
  (if (/= N1 0)
    (DO_IT (- N1 1))
    (DO_IT N3)
  )
)
 楼主| 发表于 2002-7-24 07:18:00 | 显示全部楼层

谢谢,龙龙仔前辈,看起来我的方法有点太笨拙了,呵呵!

发表于 2002-7-28 14:52:00 | 显示全部楼层

帮忙

我是一个LISP新手,请问能否给我解释一下:ASC码。有什么作用,在编程时如何用??多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:31 , Processed in 0.191715 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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