明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2628|回复: 5

请问陈伯雄老师[求助]

[复制链接]
发表于 2002-9-14 10:52:00 | 显示全部楼层 |阅读模式
我老是在我的dwg文件目录下面发现一个stoa文件,
经检查,
在你的ssx程序中,有这么一个函数,请问它的作用是什么?

  (Defun SToA (|s / |f)
    (SetQ |f (Open "stoa" "w"))
    (PrinC |s |f)
    (Close |f)
    (SetQ |f (Open "stoa" "r")
          |s (Read-Line |f)
    )
    (Close |f)
    (Eval |s)
  )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2002-9-14 13:19:00 | 显示全部楼层

把符号类型数据转换成字串。这是我以前写的程序带的,现在已经不用了...

 楼主| 发表于 2002-9-14 13:44:00 | 显示全部楼层

那么,现在有没有好一点的方法了呢?另外还有一个问题,请收一下邮件。

 楼主| 发表于 2002-9-14 14:12:00 | 显示全部楼层

嗯,我找到替代方法了,请问陈老师,你用的是什么方法呢?

_$ (vl-prin1-to-string '((1 2 3) "" 3))
"((1 2 3) \"\" 3)"
_$ (read (vl-prin1-to-string '((1 2 3) "" 3)))
((1 2 3) "" 3)
 楼主| 发表于 2002-9-14 14:51:00 | 显示全部楼层

自己写了一个想不用vl的纯autolisp的qf-list->string, 毛病多多。看来还是陈老师的

自己写了一个想不用vl的纯autolisp的qf-list->string, 毛病多多。看来还是陈老师的方法好。[br](defun QF-list->string (lst / atom->string)
  (defun atom->string(a) (cond
              ((= (type a) 'Str) (strcat "\"" a "\""))
              ((= (type a) 'Int) (itoa a))
              ((= (type a) 'real) (rtos a))
              (T "")
             )
  )
  (strcat "("
          (apply 'strcat
                 (mapcar '(lambda (x)
                            (if        (= (type x) 'list)
                              (QF-list->string x)
                              (strcat (atom->string x) " ")
                            )
                          )
                         lst
                 )
          )
          ")"
  )
)

测试:
_$ (qf-list->string '(1 2.0 3 (4 5 6.0) 2))
"(1 2 3 (4 5 6 )2 )"
_$ (qf-list->string '(1 2.0 3 (4 5 6.45) 2))
"(1 2 3 (4 5 6.45 )2 )"

对于符号名,('a 'b 'c)的列表,我也没法子了,只能用vl函数,vl-symbol-name, 呵呵。
 楼主| 发表于 2002-9-14 15:25:00 | 显示全部楼层

这回比较完善了: QF-list->string

测试:
_$ (qf-list->string '(1 a b (2 4 5) 'e "teststring" (3 4 (5))k))
"(1 A B (2 4 5 )(QUOTE E )\"teststring\" (3 4 (5 ))K )"
_$ (read (qf-list->string '(1 a b (2 4 5) 'e "teststring" (3 4 (5))k)))
(1 A B (2 4 5) (QUOTE E) "teststring" (3 4 (5)) K)

程序:
(defun QF-list->string (lst / atom->string)
  (defun atom->string (a)
    (cond ((= (type a) 'Str) (strcat "\"" a "\""))
          ((= (type a) 'Int) (itoa a))
          ((= (type a) 'real) (rtos a))
          ((= a 'QUOTE) "QUOTE")
          ((= (type a) 'sym) (SymToStr a))
          (T "")
    )
  )
  (strcat "("
          (apply 'strcat
                 (mapcar '(lambda (x)
                            (if        (= (type x) 'list)
                              (QF-list->string x)
                              (strcat (atom->string x) " ")
                            )
                          )
                         lst
                 )
          )
          ")"
  )
)


(defun SymToStr        (SymbolName)
  ;; If the argument is a symbol ...
  (if (= (type SymbolName) 'SYM)
    (progn ;; Execute the function we are going to create ...
           (;; Create a function on the fly
            (list ;; The argument and local variable list.  Note
                  ;; that SymbolName will be evaluated, so the
                  ;; symbol name that we're trying to convert
                  ;; will be a local variable.
                  (list '/ SymbolName)
                  ;; Set the local variable to 0 to make sure it
                  ;; appears in the atoms-family (variables that
                  ;; are "bound to NIL", explicitly or implicitly,
                  ;; do not appear in the atoms-family)
                  (list set (quote SymbolName) 0)
                  ;; In "native "AutoLISP", the symbol would
                  ;; now be the first one in the atoms-family
                  ;; list.  Not so in Visual LISP.  So we have
                  ;; to look up the symbol [as a symbol] using
                  ;; (member ...), compute its position in the
                  ;; list, and then extract it from the string
                  ;; version of the atoms-family list.  This
                  ;; also sets up the return value.
                  (list        nth
                        (list -
                              (list length (list atoms-family 0))
                              (list length
                                    (list member
                                          (list (quote quote) SymbolName)
                                          (list atoms-family 0)
                                    ) ;_ end list
                              ) ;_ end list
                        ) ;_ end list
                        (list atoms-family 1)
                  ) ;_ end list
                  ;; End of the dynamic function
            ) ;_ end list
           )
    ) ;_ end progn
    ;; If the argument is not a symbol, return NIL
    nil
  ) ;_ end if
) ;_ end defun
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 20:41 , Processed in 0.152513 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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