Lisp如何读取txt中指定格式文件?
有一个文件$开头的都是注释,真正有用的是以GRID 开头的点:点 点序号 x y z
GRID 1 117.961 18.3 12.
……
请问我如何能够
把点序号,提取出来赋给list1=(1,2,3,4……)
把点坐标,提取出来赋给list2=((x1 y1 z1)(x2 y2 z2)(x3 y3 z3)(x4 y4 z4)…)
<文件格式如下:>
$ translator on June 18, 2011 at 23:17:41.
$ Linear Static Analysis, Database
$ Direct Text Input for Bulk Data
$ Nodes of Group : Node
GRID 1 117.961 18.3 12.
GRID 2 141.716 18.3 12.
GRID 3 117.961 18.3 8.
GRID 4 141.716 18.3 8.
$ Loads for Load Case : Default
$ Referenced Coordinate Frames
这里有一个ZZXXQQ大侠的程序可以参考,但是我看不懂~~~~
(DEFUN C:TEST ()
(SETVAR "CMDECHO" 0)
(IF (SETQ F (OPEN "D:/T-AAA.TXT" "r")) (PROGN
(SETQ LST (LIST (READ (STRCAT "(" (SUBSTR (READ-LINE F) 2) ")"))))
(WHILE (SETQ STR (READ-LINE F))
(SETQ LST (APPEND LST (LIST (READ (STRCAT "(" (SUBSTR STR 2) ")")))))
)
(CLOSE F)
(SETQ I 0)
(SETQ PT (CDAR LST))
(COMMAND "PLINE" PT)
(REPEAT (LENGTH LST)
(SETQ PT (CDR (NTH (SETQ I (1+ I)) LST)))
(COMMAND PT)
)
(COMMAND "")
(SETQ I -1)
(REPEAT (LENGTH LST)
(SETQ PS (NTH (SETQ I (1+ I)) LST)
PN (STRCAT "T" (ITOA (CAR PS)))
PT (CDR PS))
(COMMAND "TEXT" PT 10 "" PN)
)
))
(SETVAR "CMDECHO" 1)
(PRINC)
) 或者把点序号,点坐标,一起提取出来赋给
list=((num1 x1 y1 z1)(num2 x2 y2 z2)(num3 x3 y3 z3)(num4 x4 y4 z4)…) 建议楼主学习一下表处理,用表来实现非常简单. 本帖最后由 Andyhon 于 2011-6-19 12:12 编辑
(defun c:test (/ fp str lst )
(setq fp (open "V:/test.txt" "r")) ; 文件
(while (and (setq str (read-line fp)) (not (wcmatch str "GRID*"))))
(while (not (wcmatch str "$*"))
(setq lst (cons (read (strcat "(" (substr str 5) ")")) lst)
str (read-line fp)
) )
(close fp)
(reverse lst)
)
回复 Andyhon 的帖子
好人啦,十分感谢啦!!……
呵呵,解决了大问题。。。。 回复 LLXXZZ 的帖子
也同样谢谢你,等会我去调试下。。。。。 回复 Andyhon 的帖子
顺便问一下,提取的list是什么?
如果提取出来赋给list1=(1,2,3,4……)
把点坐标,提取出来赋给list2=((x1 y1 z1)(x2 y2 z2)(x3 y3 z3)(x4 y4 z4)…)
应该如何改进呢? 返回了lst===>
'((1 117.961 18.3 12.0) (2 141.716 18.3 12.0) (3 117.961 18.3 8.0) (4 141.716
18.3 8.0))
(mapcar 'car lst)
(1 2 3 4)
(mapcar 'cdr lst)
((117.961 18.3 12.0) (141.716 18.3 12.0) (117.961 18.3 8.0) (141.716 18.3 8.0))
回复 Andyhon 的帖子
太帅了,呵呵,大好人一个,赞!………
页:
[1]