找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 687|回复: 6

[求助] [求助]:各位大哥,班竹求救!帮我看一段材料表的代码!

[复制链接]
发表于 2006-6-23 09:06:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
代码如下:文本插入可以实现,但是不能分出列来,就只有一列,插入的都是空格,程序要求插入列,且列与列之间没有空格,现在只有行,没有列,且程序写入的全是空格,哪位好心的大哥帮我看一看,在此小弟谢恩了!

  1.   [FONT=courier new]
  2. (defun c:BB()
  3. (setvar "cmdecho" 0)
  4. (setq ffn (getfiled "选择文件"  "bbb" "txt" 2))
  5. (setq pt (getpoint "\n选取文字插入点: "))
  6. (setq hh (getint "\n字高<5>: "))
  7.   (if (= hh nil)  (setq hh 5))
  8. (setq ff (open ffn "r"))
  9.   ;(str2lst)
  10. (setq data (read-line ff))

  11. (command "text" pt 0 data)
  12. (setq data (read-line ff))
  13. (while data
  14. (command "text" "" data)
  15. (setq data (read-line ff))
  16. )
  17. (close ff)
  18. (princ "材料表输入完毕")
  19. )

  20. (defun str2lst (str / ff str1);用空格区分列
  21.   (setq        ff 0
  22.         str1 ""
  23.   )
  24.   (while (/= "" (setq s (substr str (setq ff (1+ ff)) 1)))
  25.     (setq str1 (strcat str1
  26.                        (if (= " " s)
  27.                          "" ""
  28.                          s
  29.                        )
  30.                )
  31.     )
  32.   )
  33.   (read (strcat "("" str1 "")"))
  34. )
  35.   [/FONT]


相应的文件文件.TXT:
规格      长度     数量     单重      合重      备注
-10        8000     1      1250.0    1250.0     主杆

-14        7050     1      2213.0    2213.0     主杆

-5x510     510      1      15.6      15.6       顶板

-8x80      224      2      5.6       5.6        接地

-6x80      224      15     3.2      3.2         爬梯脚

-28x1130   1130     1      156.3    156.3       法兰

-12x180    220      16     12.5     12.5        加劲板

-10x750    750      1      12.6     12.6        加劲圈

-22x100    120      4      75.2     75.2        拉手

D48x3.5    1750     1      15.6     15.6        爬梯
      
D48x3.5    1250     4      8.5      8.5         爬梯
   
D48x3.5    2500     2      15.3     15.3        爬梯

800        4        2      4.5      4.5         横担
  
900        2        4      78.5     78.5        横担
  
6.8J    M24x60/16   36     0.35     0.35        横担螺栓

4.8J    M16x100/50  12     0.2      0.2         爬梯螺栓
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-6-24 08:45:45 | 显示全部楼层
关键在于读出每行后如何分割,下面提供你一个函数(以,分割串str后赋值给7个变量,类似CGI的split()函数):

  1. (defun split(str)
  2.        (setq pos 1)(setq start 2)(setq item 1)
  3.        (setq len (strlen str))
  4.        (while(and (< pos len) (/= item 8))
  5.                (if(and (= (substr str pos 1) """) (= (substr str (1+ pos) 1) ","))
  6.                       (PROGN
  7.                                      (setq len1 (- pos start))
  8.                                      (cond ((= item 1) (setq MCC (substr str start len1)))
  9.                                                ((= item 2) (setq GGG (substr str start len1)))
  10.                                                ((= item 3) (setq DWW (substr str start len1)))
  11.                                                ((= item 4) (setq SLL (substr str start len1)))
  12.                                                ((= item 5) (setq CLL (substr str start len1)))
  13.                                                ((= item 6) (setq DZZ (substr str start len1)))
  14.                                                ((= item 7) (setq ZZZ (substr str start len1)))
  15.                                      )
  16.                                      (setq item (1+ item))
  17.                                      (setq pos (+ 2 pos)) (setq start (1+ pos))
  18.                       )
  19.                       (setq pos (1+ pos))
  20.                 )
  21.        )
  22.        (setq len1 (- len start))
  23.        (setq BZZ (substr str start len1))
  24. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-6-24 15:34:44 | 显示全部楼层
对比下,注意TXT文件不要有空行,否则要处理

  1. (defun c:tt (/ fn fl pt vy vx hh str strl p0 p1)
  2.   (setvar "cmdecho" 0)
  3.   (if (and (setq fn (getfiled "选择文件" "bbb" "txt" 2))
  4.            (setq pt (getpoint "\n选取文字插入点: "))
  5.            (setq vy (getdist pt "\n行距: ")) ;_填表用
  6.            (setq vx (getdist pt "\n列宽: "))
  7.       )
  8.     (progn
  9.       (setq
  10.         hh (getdist pt (strcat "\n字高<" (getvar "textsize") ">: "))
  11.       )
  12.       (if (= hh nil)
  13.         (setq hh (getvar "textsize"))
  14.       )
  15.       (setq fl (open fn "r"))
  16.       (while (setq str (read-line fl))
  17.         (setq strl (cons str strl))
  18.       )
  19.       (close fl)
  20.       (setq strl
  21.              (reverse (mapcar '(lambda (x) ([URL=http://p4.xdcad.net/forum/showthread.php?s=&threadid=456222][color=blue][U]xdl-str-parse[/u][/color][/URL]  x " ")) strl))
  22.             p0 pt
  23.       )
  24.       (mapcar '(lambda (x)
  25.                  (setq p1 p0)
  26.                  (mapcar '(lambda (s)
  27.                             (command ".text" p1 hh 0. s) ;_注意字体定义了固定高度参数会不一样
  28.                             (setq p1 (polar p1 0. vx))
  29.                           )
  30.                          x
  31.                  )
  32.                  (setq p0 (polar p0 (/ pi -2.) vy))
  33.                )
  34.               strl
  35.       )
  36.     )
  37.   )
  38.   (princ)
  39. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-24 17:57:02 | 显示全部楼层
TXT数据按行、空格在CAD中建行列式表格
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-24 17:59:18 | 显示全部楼层
效果:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-6-25 14:30:01 | 显示全部楼层
给个通用的文件读取函数:以后的事自己解决吧!

  1. ;;读字符串成表:
  2. ;;x为分隔符可为多个字符空格用" "or"\s"
  3. (defun str->lst        (str x / xlen n lis str)
  4.   (setq xlen (strlen x))
  5.   (while (setq n (vl-string-search x str))
  6.     (setq lis (cons (substr str 1 n) lis))
  7.     (setq str (substr str (+ 1 xlen n)))
  8.   )
  9.   (reverse (cons str lis))
  10. )
  11. ;;读文件成表
  12. (defun file->lst (fn / str lst)
  13.   (setq fn (open fn "r"))
  14.   (while (setq str (read-line fn))
  15.     (setq lst (cons str lst))
  16.   )
  17.   (close fn)
  18.   (reverse lst)
  19. )
  20. ;;读文件成双层表
  21. (defun file->lst2 (fn x)
  22.   (mapcar '(lambda (str) (str->lst str x)) (file->lst fn))
  23. )

有了这个关键部分就出来了!以后的 [画表格线写入文本(推荐插属性块)]
不用再说了吧自己写罗!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-28 23:12:50 | 显示全部楼层
班竹xyp1964 大哥,你的程序很好,正合我的意思,你能不能给我一段源码,我想自己再修改一下,以便理完善.谢谢BJS0448@163.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 19:32 , Processed in 0.301282 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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