找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2399|回复: 16

[编程申请]:晓东及众高手:对带数字的不同文字进行统计及数字汇总.

[复制链接]
发表于 2002-9-22 02:59:00 | 显示全部楼层 |阅读模式

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

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

×
园林绿化种植的施工图设计中,我们需要对不同地方的树木进行文字标注,这些标注分布在图纸的不同地方,树木品种多的时候能达到100多种,最后我们要对同一品种的总数进行汇总,如在图纸中有三处文字标注
香樟10,杜鹃100,银杏5;  香樟20,杜鹃200,银杏10;    香樟20,杜鹃100,银杏15,最后我们要对同一品种的苗木的数字进行相加,得出列表
香樟  50
杜鹃  400
银杏  30
我们现在只能把图纸打印出来后手工分类,数字汇总,费时又容易出错.能不能编一个程序,对所选择的文字进行归类列表,并对汉字后所附带的数字相加汇总?附一张我们的施工图供参考.不好意思,要求有点过分,先多谢了.
我的要求和doogns的"数据统计"是一个内容.doongns一看就是同行,想必也是算趴了,嘿嘿!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-22 03:12:46 | 显示全部楼层
把你最后统一后,自己绘制的统计表DWG也传到论坛来吧,我直接给你生成最后的图形,这样方便。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-9-22 15:07:25 | 显示全部楼层
晓东,谢谢你的回复,上传这张图表是我们统计后的格式(苗木名称和数字不是我上传的那张图,那张图我还没来得及汇总),其中"苗木名称"就是要填入标注的汉字部分,"数量"要填入的就是同一汉字后的数字汇总.其它部分需要设计师根据自己的需要填入.传给你参考.
另:上次传的图汉字标注后有些标了单位M2,可以忽略不考虑,统一按"汉字+数字"的格式考虑.
多谢了!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-9-22 15:10:50 | 显示全部楼层
对了,图表的大小可以scale,不过我一般习惯按1:1000绘图,字高为2左右.多谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2002-10-8 17:46:39 | 显示全部楼层
这是我为一个朋友写的系列程序(线路统计,现在还在继续完善)中的一个,试试,不过只能对单个的“名称+数字”有效,不能辨别“,”,如果需要以后可以再调整。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-11 12:40:05 | 显示全部楼层
我已经是把黑夜想成了天亮,园林中这样的统计真是太烦了!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-12 12:50:23 | 显示全部楼层
最初由 Qlin 发布
[B]不知这个问题解决得如何了?
若没有我或许可以试试 [/B]


QLIN,给大家写个纯LISP的代码吧,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-12 15:25:12 | 显示全部楼层
我也碰到过这样得问题,望各位高手帮忙解决,谢谢拉!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-12 15:45:13 | 显示全部楼层
我写了数据收集和数据统计两部分的代码,
其它的希望大家来一起合作。

基本上交互界面是这样的(以第一张帖子的图为例):
[B]
Command: treecalc
任选一标注文字以确定参加统计的文字图层:
  选中<苗木文字>层, 现在选择需计算文字实体:
Select objects: all
970 found
886 were filtered out.
Select objects:
[/B]
目前输出结果:
[B]
((草花 18) (瓜子黄杨球 26) (棕榈 25) (银杏 11) (红花美人蕉 26) (大桂花 8)
(红花继木球 11) (下小龙柏 33) (青枫 3) (榉树 5) (下杜鹃 160) (下红花酢浆草 236)
(瓜子黄杨 158) (紫叶小檗 40) (金叶女贞 123) (下麦冬 115) (珊瑚树 488) (红枫 6)
(枸骨球 8) (黄馨 280) (慈孝竹 75) (丰花月季 53) (下射干 100) (白玉兰 3) (小龙柏
145) (金丝桃 58) (下南天竹 60) (合欢 4) (白花三叶草 90) (下桃叶珊瑚 30)
(下狭叶十大功劳 60) (杜英 6) (紫鹃 70) (雪松 5) (大银杏 4) (香樟 45) (桂花 60)
(广玉兰 3) (垂丝海棠 17) (木槿 65) (罗汉松 77) (山茶 40) (石楠 45) (八角金盘
260) (紫薇 30) (花石榴 30))
[/B]



  1. ;;;----------------------------------------------------------------
  2. ;;;程序入口
  3. ;;;
  4. ;;;
  5. ;;;可以在这里加入你自己的专业处理函数,形成符合自己专业要求的程序
  6. ;;;
  7. ;;;本程序可以免费修改、使用,但在本程序基础上所增添的代码,亦不得
  8. ;;;收取任何形式的费用,不得进行加密或编译成不可阅读的版本。
  9. ;;;
  10. ;;;2002.10.12   by Qlin
  11. ;;;----------------------------------------------------------------
  12. (defun c:treecalc (/ lst_tree)
  13.   ; 数据统计,生成统计数据表
  14.   (setq lst_tree (treecalc_calculate))

  15.   ; 表格进一步处理,可加入排序、规格说明、单位等其它数据形成专业数据表
  16.   
  17.   ; 数据表输出
  18.   ; (可以在这里加入表格绘制或数据输出到文件等功能)
  19.   (princ lst_tree)

  20.   (princ)
  21. );end

  22. ;;;----------------------------------------------------------------
  23. ;;; 统计所选择的文字,返回统计后的表
  24. ;;; 2002.10.12 by Qlin
  25. ;;;----------------------------------------------------------------
  26. (defun treecalc_calculate (/ ss ent1 str1 n lst_n lst_o n1 lst_all)
  27.   (setq n 0)
  28.   (if (setq ss (treecalc_gettext))
  29.     (while (setq ent1 (ssname ss n))
  30.       (setq str1 (cdr (assoc 1 (entget ent1))))
  31.       (setq lst1 (mixstring->list str1))
  32.       (if (> (length lst1) 1) ;判断文字格式
  33.         (if (> (atoi (cadr lst1)) 0) ;判断是否含有数字
  34.           (progn
  35.             (setq  str2 (car lst1)
  36.                   lst_n (list str2 (atoi (cadr lst1))))
  37.             (if (setq lst_o (assoc str2 lst_all))
  38.               (progn
  39.                 (setq n1 (+ (cadr lst_n)(cadr lst_o)))
  40.                 (setq lst_n (list str2 n1))
  41.                 (setq  lst_all (subst lst_n lst_o lst_all))
  42.               );progn
  43.               (setq lst_all (cons lst_n lst_all))
  44.             );if
  45.           );progn
  46.         );if
  47.       );if
  48.       (setq n (1+ n))
  49.     );while
  50.   );if
  51.   (setq lst_all (reverse lst_all))
  52. );end

  53. ;;;----------------------------------------------------------------
  54. ;;; 选定指定图层的文字实体,返回符合要求的选择集
  55. ;;;----------------------------------------------------------------
  56. (defun treecalc_gettext (/ en ss1 lay)
  57.   (while (not en)
  58.     (if (setq en (entsel "\n任选一标注文字以确定参加统计的文字图层:"))
  59.       (if (/= (cdr (assoc 0 (entget (car en)))) "TEXT")
  60.         (progn
  61.           (setq en nil)
  62.           (princ "非文字实体!")
  63.         );progn
  64.         (redraw (car en) 3)
  65.       );if
  66.     );if
  67.   );while
  68.   (setq lay (cdr (assoc 8 (entget (car en)))))
  69.   (princ "\n  选中<")(princ lay)(princ ">层")
  70.   (princ ", 现在选择需计算文字实体:")
  71.   (setq ss1 (ssget (list (cons 0 "TEXT")(cons 8 lay))))
  72. )

  73. ;;;----------------------------------------------------------------
  74. ;;; 将字符串以数字为间隔分解成字符串表
  75. ;;;----------------------------------------------------------------
  76. (defun mixstring->list (str_in / lst_out n len1 lst_n
  77.                       chr_c chr_n chr_p
  78.                       str_c str_id
  79.                       num_add str_add)
  80.   (defun num_add ()
  81.     (if str_id
  82.       (progn
  83.         (if (/= str_c "")(setq lst_out (cons str_c lst_out)))
  84.         (setq  str_c chr_c
  85.               str_id nil
  86.         );setq
  87.       )
  88.       (setq str_c (strcat str_c chr_c))
  89.     );if
  90.   )

  91.   (defun str_add ()
  92.     (if str_id
  93.       (setq str_c (strcat str_c chr_c))
  94.       (progn
  95.         (if (/= str_c "")(setq lst_out (cons str_c lst_out)))
  96.         (setq  str_c chr_c
  97.               str_id T
  98.         );setq
  99.       )
  100.     );if
  101.   )
  102.   
  103.   ;C-1: 加入对输入值的判断
  104.   (if (and str_in (/= str_in ""))
  105.     (setq len1 (strlen str_in))
  106.     (setq len1 0)
  107.   )
  108.   
  109.   (setq n 1
  110.         lst_n (list "0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
  111.         str_c "")

  112.   (repeat len1
  113.     (setq chr_c (substr str_in n 1))
  114.     (cond
  115.       ((member chr_c lst_n)
  116.        (num_add)
  117.       )
  118.       ((= chr_c ".")
  119.        (if (< n len1)
  120.           (setq chr_n (substr str_in (1+ n) 1))
  121.          (setq chr_n "")
  122.        );if
  123.        (if (member chr_n lst_n)
  124.          (num_add)
  125.          (str_add)
  126.         )      
  127.       )
  128.       ((= chr_c "-")
  129.        (if (< n len1)
  130.           (setq chr_n (substr str_in (1+ n) 1))
  131.          (setq chr_n "")
  132.        );if
  133.        (if (or (member chr_n lst_n)(= chr_n "."))
  134.          (num_add)
  135.          (str_add)
  136.         )
  137.       )
  138.       ((= chr_c "+")
  139.        (if (< n len1)
  140.           (setq chr_n (substr str_in (1+ n) 1))
  141.          (setq chr_n "")
  142.        );if
  143.        (if (or (member chr_n lst_n)(= chr_n "."))
  144.          (num_add)
  145.          (str_add)
  146.         )
  147.       )
  148.       ((or (= chr_c "E")(= chr_c "e"))
  149.        (if (< n len1)
  150.           (setq chr_n (substr str_in (1+ n) 1))
  151.          (setq chr_n "")
  152.        );if
  153.        ;C-2: 修改判断条件使之支持‘2e-3’类型的数据
  154.        (if (or
  155.              (and (member chr_n lst_n)(member chr_p lst_n))
  156.              (and (= chr_n "+")(member chr_p lst_n))
  157.              (and (= chr_n "-")(member chr_p lst_n))
  158.            );or
  159.          (num_add)
  160.          (str_add)
  161.         )
  162.       )
  163.       (T(str_add))
  164.     );cond
  165.    
  166.     (setq n (1+ n)
  167.           chr_p chr_c
  168.     )
  169.   );repeat

  170.   (if (> len1 0)
  171.     (progn
  172.       (if (/= str_c "")(setq lst_out (cons str_c lst_out)))
  173.       (setq lst_out (reverse lst_out))
  174.     );progn
  175.   );if
  176.   lst_out
  177. )


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

使用道具 举报

 楼主| 发表于 2002-10-12 21:50:53 | 显示全部楼层
ll j兄的程序我试了一下,他没有对所选汉字没有归类列表的功能,这对我们来说还是不大方便,因为如果设计的有100个品种的话,我就必须选择壹佰次,并在对话框中分别输入100个苗木品种的名称,太麻烦了!不过他的程序有一个非常好的地方,就是在一个品种文字汇总后可以查相加汇总前的具体数字,便于检查.无论如何多谢多谢!!
其实不一定要列出一个最终的苗木表,只要对所选择的文字进行归类列表,并对汉字后所附带的数字相加汇总就可以了.多谢xdsoft及众高手的鼎力支持,我在盼呀盼..........
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-10-13 00:07:37 | 显示全部楼层
刚看到Qlin兄的程序,用以前的工程试了一试,正是我们所希望的东西,太感谢了,这简直是人性的解放!!!以后在具体的工程中用后如有什么问题再向各位高手请教.
向ll-j,xdsoft、Qlin致以最诚挚的谢意,你们可真是大好人。。。。。:4:4
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2002-10-28 00:11:25 | 显示全部楼层

  1. ;树木统计  tj
  2. ;名称"树2木100"-- >("树""2.0")  "树2e+2"-- >("树""200.0")
  3. ;直接以选集的第一个字的字型书写.
  4. ;如有改进请告知
  5. ;分离文字和数字,我的方法大家看看
  6. (defun c:tj( / dxf maketext break-it all all-tree e0 hi j lay len li1 name p1 p2 ss sty swap tree)
  7. (defun dxf(NO SWA) (CDR (ASSOC NO SWA)))
  8. (defun maketext(nowstr p1 sty hi / li-str)
  9.    (setq li-str
  10.    (list
  11.     '(0 . "TEXT")
  12.     '(100 . "AcDbEntity")
  13.     '(100 . "AcDbText")
  14.      (cons 8 lay)
  15.      (cons 10 p1)
  16.      (cons 40 hi)
  17.      (cons 1 nowstr)
  18.     '(41 . 0.7)
  19.      (cons 7 sty)
  20.     '(100 . "AcDbText")  ) )
  21.     (entmake li-str)
  22. )
  23. ;;;;;;;;;;;;***************
  24. (defun break-it(name / j len n1 n2 ture)    ; "abc12"-->("abc""12.0")  |  "abc" or "123"-->nil   | "abc23M"-->("abc""23.0")
  25.   (setq len(strlen name) j 1)
  26.   (while(<= j len)
  27.    (setq n1(substr name 1 (1- j)) n2(substr name j) )
  28.    (if(/= 0(atof n2 ))(setq ture(list n1 n2) j(1+ len) )(setq ture nil))
  29.    (setq j (1+ j))
  30.   )(if(and ture(= ""(car ture)))(setq ture nil))    ;统计纯数字去这一行if...
  31.   ture)
  32. ;;;;;;;;;;;;;;*************
  33. (setq swap(car(entsel)))
  34. (if swap(setq lay(dxf 8(entget swap))))
  35. (setq ss(ssget (list(cons 8 lay)(cons 0 "*TEXT"))))
  36. (setq j 0 len(sslength ss))
  37. (setq all '() tree '())
  38. (while(< j len)
  39.   (setq e0(entget(ssname ss j)) name(dxf 1 e0))
  40.   (if(= j 0)(setq sty(dxf 7 e0) hi (dxf 40 e0)))   
  41.   (while (= 32(ascii name))(setq name (substr name 2)))      ;去前空格
  42.   (setq li1(break-it name)name(car li1) )
  43.   (if li1
  44.    (if (member name tree)
  45.    (setq all(subst(append (assoc name all)(list(cadr li1)))(assoc name all) all) )
  46.    (setq tree(cons name tree)all(cons li1 all) )
  47.    )
  48.   )(setq j(1+ j))           
  49. )                                                 ;all---->(("A" "2" "3"...)("B" "4" "5"...)...)
  50. (setq all-tree '())                               ;all-tree----->(("A" "12.2")("B""45.0")...)
  51. (foreach x all(setq all-tree(cons(list(car x)(rtos(apply '+(mapcar 'atof(cdr x)))2 1)) all-tree)))
  52.    ;all-tree排序,在这一行加
  53. (setq all-tree(cons(list "名称""数量")all-tree))
  54. (setq p1(getpoint "Point to Draw:"))
  55. (command"undo""group")
  56. (foreach x all-tree                               ;draw it now
  57.    (maketext (car x)p1 sty hi)
  58.     (setq p2(polar p1 0(* hi 10)))
  59.     (maketext (cadr x)p2 sty hi)
  60.    (setq p1(polar p1 (* pi 1.5)(* 1.2 hi)))
  61. )
  62. (command"undo""end")
  63. (princ "OK!")(princ)
  64. )

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-28 00:15:01 | 显示全部楼层
最初由 aeo 发布
[B][code]
;&Ecirc;÷&Auml;&frac34;&Iacute;&sup3;&frac14;&AElig;  tj
;&Atilde;&ucirc;&sup3;&AElig;&Agrave;&iuml;&sup2;&raquo;&Auml;&Uuml;&sup3;&ouml;&Iuml;&Ouml;&Ecirc;&yacute;×&Ouml;  example: &sup2;&... [/B]


谢谢AEO,你的注释汉字是乱码,能不能编辑下帖子,修改下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 08:00 , Processed in 0.508390 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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