AQucsaiJr 发表于 2022-7-5 23:38:27

编辑批处理LISP

我有一个由Tony Tanzillo编写的程序,它的工作方式完全符合我希望我的批处理程序的工作方式,只是我想在保存和关闭它之前,在它打开的每个图形上运行一个文本替换程序。
 
 
我一直在尝试一些事情,但我似乎不知道需要添加什么才能实现这一点。
 
我想我没有足够的经验来知道使用哪个命令。我知道我需要在“;”中添加这个命令行,这将是您的批处理函数:“区域,但我不知道要使用什么命令,以便它在打开时运行我的程序。
 
我试图调用的程序是REPSTRING,这是我用来替换文本的另一个LISP。

AQucsaiJr 发表于 2022-7-5 23:44:09

我不知道这是否可行,但如果程序暂停足够长的时间以运行命令,然后在命令运行后恢复,该怎么办?

Lee Mac 发表于 2022-7-5 23:46:07

 
当从LISP中调用函数时,这不是必需的。。。但我真的没有足够的代码来处理这里。。。
 
这取决于文本替换是否接受参数,是否从命令行调用等等。。。

AQucsaiJr 发表于 2022-7-5 23:50:25

 
这个怎么样:
(defun C:OPB (/ *good-files* acapp adoc file_obj full-names-list osd)
(alert
   "\nPlease wait a minute
\nto ending of batch file operation"
)
(vl-load-com)

(setq    acapp (vlax-get-acad-object)
   adoc(vla-get-activedocument acapp)
)

(vla-startundomark adoc)
(setq osd (vla-getvariable adoc "SDI"))
(vla-setvariable adoc "SDI" 0)
(setq olsp (vla-getvariable adoc "LISPINIT"))
(vla-setvariable adoc "LISPINIT" 0)
(if (setq full-names-list
      (list-dwg (browse-folder "SELECT FOLDER" "C:\\"))
   )
   ; change on your start path folder
   (progn
   (mapcar
   (function
   (lambda (i)
       (progn
         (setq file_obj (vla-open (vla-get-documents acapp) i))
         (setq *good-files* (cons file_obj *good-files*))
         ;;here will your batch function:
         (vla-setvariable file_obj "mirrtext" 0)
;          (vla-setvariable file_obj "insunits" 0)
;          (vla-setvariable file_obj "annotativedwg" 0)
         (vla-close file_obj :vlax-true)
         (vlax-release-object file_obj)
         (setq file_obj nil)
       )
   )
   )
   full-names-list
   )

   (cond ((zerop (length *good-files*))
      (princ "\nThere isn't opened files\n")
       )
       ((not (eq (length full-names-list) (length *good-files*)))
      (princ "\nSome files is not opened\n")
       )
       (T nil)
   )
   )
   (princ "\nThere isn't .DWG files in selected directory\n")
)
(vla-setvariable adoc "SDI" osd)
(vla-setvariable adoc "LISPINIT" olsp)
(vla-endundomark adoc)
(princ)
)
 
我尽量避免违反托尼的任何规定。。。

Lee Mac 发表于 2022-7-5 23:52:35

所以,是的,它确实告诉你在图形上把函数放在哪里,所以它取决于你想要调用的函数的格式——它接受参数吗?

AQucsaiJr 发表于 2022-7-5 23:57:30

对我试图运行的命令由REPSTRING调用,有两个参数,要替换的文本和要替换的文本。
 
我相信这样的话:
 
重复字符串
文本1
文本2

AQucsaiJr 发表于 2022-7-6 00:00:32

我试着插入线路:
(命令“REPSTRING”“TEXT1”“TEXT2”)
但这会不断产生未知的命令,但我可以在命令行中键入REPSTRING,每次都可以正常工作。

Lee Mac 发表于 2022-7-6 00:03:42

不,不,我的意思是在命令行调用的函数,或者它是一个子函数,接受参数。
 
但是,从您的响应中,我可以看到它是从命令行调用的。
 
您可以使用
 

(c:repstring)

 
但是,我倾向于将代码更改为sub,并接受参数,因为这样会更健壮。

AQucsaiJr 发表于 2022-7-6 00:05:11

好的,那么如果我将REPSTRING LISP添加到此批处理LISP中会怎么样呢
 
然后,在BATCH LISP中调用add BATCH function的部分中,我放置以下内容:
 
这行吗?
 
我想我需要补充一下:
(SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: "))
(SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: "))
 
OPB计划即将开始。

Lee Mac 发表于 2022-7-6 00:09:22

不,你只需要打电话
 

(repstring "OldString" "NewString")

 
在批次代码中。
页: [1] 2
查看完整版本: 编辑批处理LISP