可以使用通配符或
我使用Crystal Reports导出文本文件,然后由AutoCad lisp使用读取行读取。到目前为止,我不得不手动导出文本文件,我总是将其导出到相同的文件名。
我最近发现了一个实用程序,可以自动生成Crystal报表。txt导出(这很好),但问题是每个导出实例的文件名都会更改。
前任:
第一次出口:
报告1-20120316124908。txt文件
第二次出口:
报告1-20120316125527。txt文件
第三次出口:
报告1-20120316125623。txt文件
每当运行lisp时,只有一个文本文件,该文件将始终以相同的名称开头,但“-”后面的信息将不同。
因此,对于上面的示例,我所需要的只是能够识别以“report1”开头的文本文件
在AutoCad中是否有任何方法可以识别。使用通配符或字符串搜索的txt文件?
谢谢您的关注
AJS公司 研究vl目录文件函数的VLIDE帮助文档,特别是“模式”参数。 谢谢你的回复
我觉得自己很愚蠢,没有先考虑VL选项。我最初是在Intellicad上学习Lisp的,这是一种常见的Lisp,所以我没有使用VL的背景。
然而,尽管如此,VL FileName mkTemp函数工作得很好:
_$(setq Var1(VL FileName mkTemp“report1”C:\\creexport.txt)
Var1生成:“C:\\CREXPORT\\repor00q.txt”
我仍然有一些修补工作要做,但我非常接近有一个伟大的小程序,这将节省很多时间。
再次感谢 我说得太快了。
我的印象是,我现有的文件被复制到临时文件,但每当我试图打开它,我得到一个零。
然后我试着使用VL目录文件。当我这样做时,我确实得到了完整的文件名:
_$(setq Var1(vl目录文件“C:\\CREXPORT”“Repor*.txt”1))
Var1产量:
(“报告1-20120316124908.txt”)
然而,当我试图打开Var1文本文件时,我得到了一个错误:
(setq Var2(open Var1“r”);错误:错误的参数类型:stringp
我会继续调查这件事,如果我弄明白了,我会把结果贴出来 我简直不敢相信我在这方面犯了多少错误,包括在解决文本文件访问问题时忘记了目录路径。然而,我最终还是把一切都做好了(下面的内容并不优雅,我相信我以后可以把它浓缩起来):
_$(setq Var1(vl目录文件“C:\\CREXPORT”“Repor*.txt”1))
_$(setq Var2(vl princ到字符串'Var1))
(setq Var3(-strlen Var2)2))
(setq Var4(substr Var2 2 Var3))
(setq Var5(Strcat“C:\\CREXPORT\\”Var4))
Var5生成:“C:\\creexport\\report1-20120316124908.txt”
...我可以成功打开它——是的!
我假设我的问题之一是vl directory files函数生成了一个列表,该列表是使用princ to string修复的。
再次感谢,希望我的挣扎能对别人有用。 提示:阅读文档。
vl filename mktemp返回的文件名不存在;如文档所述,此函数仅计算给定参数的唯一文件名。
再次阅读文档。打开函数需要一个文件名(字符串)来打开,vl目录文件返回字符串列表;因此,需要使用LISP的列表函数之一从列表中检索字符串。
LISP名称源自列表处理;LISP最擅长的是处理列表。
鉴于vl目录文件返回一个列表,LISP提供了许多函数,允许您根据需要操作该列表。。。所以你直接将列表转换为字符串。。。
考虑一下:
(if
(and
(setq lst (vl-directory-files "C:\\CREXPORT" "Repor*.txt" 1))
(setq fds (open (strcat "C:\\CREXPORT" (car lst)) "r"))
)
... read the file ...
) 感谢您的跟进和建议。。。。。
页:
[1]