明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2406|回复: 9

[讨论] Lisp如何读取txt中指定格式文件?

[复制链接]
发表于 2011-6-18 23:24:26 | 显示全部楼层 |阅读模式
有一个文件$开头的都是注释,真正有用的是以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

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 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)
)
 楼主| 发表于 2011-6-18 23:43:52 | 显示全部楼层
或者把点序号,点坐标,一起提取出来赋给
list=((num1 x1 y1 z1)(num2 x2 y2 z2)(num3 x3 y3 z3)(num4 x4 y4 z4)…)
发表于 2011-6-19 05:54:35 | 显示全部楼层
建议楼主学习一下表处理,用表来实现非常简单.
发表于 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)
)
 楼主| 发表于 2011-6-19 10:45:57 | 显示全部楼层
回复 Andyhon 的帖子

好人啦,十分感谢啦!!……
呵呵,解决了大问题。。。。
 楼主| 发表于 2011-6-19 10:46:51 | 显示全部楼层
回复 LLXXZZ 的帖子

也同样谢谢你,等会我去调试下。。。。。
 楼主| 发表于 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)…)
应该如何改进呢?
发表于 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))
 楼主| 发表于 2011-6-19 12:19:21 | 显示全部楼层
回复 Andyhon 的帖子

太帅了,呵呵,大好人一个,赞!………
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-12 08:11 , Processed in 0.183373 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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