明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1533|回复: 7

如何实现对外部文件的操作?

[复制链接]
发表于 2005-1-5 09:49:00 | 显示全部楼层 |阅读模式
有一个TXT文件,里面是一些CAD的数据的储存.我想实现在CAD中对它的操作,比如把T-123 改成V-123,把T-ABC所在的行删除,这样该怎么用lisp实现呢?想了好长时间,没弄出来,在这儿请教高手门啦!先谢谢啦! 1.txt (T-123 2 3 4 5 6)
(T-123 w e r t y)
(T-ABC asdfasd asd a a d f)
(V-123 nil nil nil nil nil nil)
(T-ASC 1 2 3 4 5 6)
(T-ACC nil nil nil nil nil nil)
发表于 2005-1-5 11:36:00 | 显示全部楼层
我花了一个小时48分帮你写了一个. 你试试看. 以下是代码: ;时间: 2005-01-05
;编程: BDYCAD
;字符查找与替换
; (BDY-Editstring <要找的文字> <替换成的文字> <输入要替换的字符串>)
;应用举例:
;;;(SETQ char-A "DRAWING1" char-B "BDYCADCAD" dfd "DRAWING1 asdfasdf")
;;;(BDY-Editstring char-A char-B dfd)
(defun BDY-Editstring (char-A char-B typeA / BDY-E1
BDY-EA BDY-EB I L-CHAR-A L-TYPEA
RUN
)
(setq L-typeA (STRLEN typeA)
L-char-A (STRLEN char-A)
Run (- L-typeA L-char-A)
i 1
)
(repeat Run
(setq BDY-E1 (substr typeA 1 (1- i))
BDY-Ea (substr typeA i L-char-A)
BDY-Eb (substr typeA (+ L-char-A i))
)
(if (eq BDY-Ea char-A)
(setq typeA (strcat BDY-E1 char-B BDY-Eb))
)
(setq i (1+ i))
)
typeA
)
; 主程序;
(defun c:tt (/ EDIT1 FIND I IN-LIST
IN-STRING NEW-LIST NEW-T OP-FILE OP-FILE-W
RUN-L W-L
)
(setq Find (getfiled "选择TEXT文件" "" "TXT" 0))
(setq In-List nil
Op-File (open Find "r")
)
(while (setq In-string (read-line Op-File))
(setq In-List (append In-List (list In-string)))
)
(close Op-File)
(setq New-LIST nil
i 0
)
(repeat (length In-List)
(setq edit1 (nth i In-List))
(setq New-T (BDY-Editstring "T-123" "V-123" edit1))
(setq New-LIST (APPEND New-LIST (LIST New-T)))
(setq i (1+ I))
)
(setq Op-File-w (open Find "w")
Run-L (length New-LIST)
i 0
)
(repeat Run-L
(setq W-L (nth i New-LIST))
(write-line W-L Op-File-w)
(setq i (1+ i))
)
(close Op-File-w)
(princ)
)

评分

参与人数 1金钱 +2 贡献 +2 激情 +2 收起 理由
龙龙仔 + 2 + 2 + 2 【好评】好程序能用在R14

查看全部评分

发表于 2005-1-5 13:14:00 | 显示全部楼层
;我花了10分钟 (defun c:test( / filename f str strs)
(setq filename "e:\\1.txt")
(setq f (open filename "r"))
(while (setq str (read-line f))
(setq str (read str))
(if (= (car str) 'T-123)
(setq str (cons 'V-123 (cdr str)))
)
(if (/= (car str) 'T-ABC)
(setq strs (append strs (list str)))
)
)
(close f)
(setq f (open filename "w"))
(mapcar '(lambda(e) (write-line (vl-prin1-to-string e) f)) strs)
(close f)
(princ)
)
发表于 2005-1-5 13:25:00 | 显示全部楼层
谢谢!我也现在研究这个命题!
 楼主| 发表于 2005-1-5 13:45:00 | 显示全部楼层
俺花了30分钟读懂二位的程序. BDYCAD老师的程序比较适合普遍的文字替换,但是忘记实现把T-ABC所在的行删除的功能.飞哥的程序是为俺量身定做的,简洁明了,好!俺又学习到不少,谢谢二位高人!
发表于 2005-1-5 13:49:00 | 显示全部楼层
Meflying 的精简. 值的学习.
发表于 2005-1-5 14:52:00 | 显示全部楼层
meflying老师的,我左看右看,上看下看,都看不懂。哎。对Vlisp一点都不懂。也不知道该怎么学。教材都找不到一本。
发表于 2005-1-5 19:49:00 | 显示全部楼层
飞哥的程序好,够简洁的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 22:16 , Processed in 0.285406 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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