tm20038175 发表于 2011-6-18 23:24:26

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

tm20038175 发表于 2011-6-18 23:25:56

这里有一个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)
)

tm20038175 发表于 2011-6-18 23:43:52

或者把点序号,点坐标,一起提取出来赋给
list=((num1 x1 y1 z1)(num2 x2 y2 z2)(num3 x3 y3 z3)(num4 x4 y4 z4)…)

LLXXZZ 发表于 2011-6-19 05:54:35

建议楼主学习一下表处理,用表来实现非常简单.

Andyhon 发表于 2011-6-19 09:16:19

本帖最后由 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)
)

tm20038175 发表于 2011-6-19 10:45:57

回复 Andyhon 的帖子

好人啦,十分感谢啦!!……
呵呵,解决了大问题。。。。

tm20038175 发表于 2011-6-19 10:46:51

回复 LLXXZZ 的帖子

也同样谢谢你,等会我去调试下。。。。。

tm20038175 发表于 2011-6-19 11:14:18

回复 Andyhon 的帖子

顺便问一下,提取的list是什么?
如果提取出来赋给list1=(1,2,3,4……)
把点坐标,提取出来赋给list2=((x1 y1 z1)(x2 y2 z2)(x3 y3 z3)(x4 y4 z4)…)
应该如何改进呢?

Andyhon 发表于 2011-6-19 12:16:07

返回了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))

tm20038175 发表于 2011-6-19 12:19:21

回复 Andyhon 的帖子

太帅了,呵呵,大好人一个,赞!………
页: [1]
查看完整版本: Lisp如何读取txt中指定格式文件?