明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: dengken204

[求助]希望高手对FIND命令做个扩展?

  [复制链接]
发表于 2008-7-13 22:18:00 | 显示全部楼层

那个是你的操作错误,当你的回车次数等于查找的文字的个数的时候,程序结束退出了。而你此时再按回车,就是重复上一次命令,就再度启动程序。

发表于 2008-7-14 21:21:00 | 显示全部楼层

我的程序仅用于这样的编号<1> <2> <3>.......

(defun zhao()
(setq nn (nth 0 zuixiao))
(setq jg (strcat "您所选择的最小杆件号是" (itoa nn)))
(alert jg)
(setq xunhuan (nth 0 zuida))
(setq jg1 (strcat "您所选择的最大杆件号是" (itoa xunhuan)))
(alert jg1)
(while (<= nn xunhuan)
(setq len2 (vl-list-length biao))
(setq biao1 (vl-remove nn biao))
(setq len3 (vl-list-length biao1))
(setq jieguo (- len2 len3))
(cond

((= jieguo 0)
(progn
(setq mm (strcat "件号" (itoa nn) "是空号"))
(prompt "\n" )
(prompt mm )

)  ;end progn


)


((= jieguo 1) (princ))

(t
(progn
(setq mm (strcat "件号" (itoa nn) "有" (itoa jieguo) "件重号" ))
(prompt "\n" )
(prompt mm )
)   ;end progn
)   ;end

)   ;end cond
(setq nn (+ 1 nn))
)   ;end repeat
(princ)

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun zhao1()
(setq nn (nth 0 zuixiao))
(setq jg (strcat "您所选择的最小杆件号是" "PG" (itoa nn)))
(alert jg)
(setq xunhuan (nth 0 zuida))
(setq jg1 (strcat "您所选择的最大杆件号是" "PG" (itoa xunhuan)))
(alert jg1)
(while (<= nn xunhuan)
(setq len2 (vl-list-length biao))
(setq biao1 (vl-remove nn biao))
(setq len3 (vl-list-length biao1))
(setq jieguo (- len2 len3))
(cond

((= jieguo 0)
(progn
(setq mm (strcat "件号" "PG" (itoa nn) "是空号"))
(prompt "\n" )
(prompt mm )

)  ;end progn
)


((= jieguo 1) (princ))

(t
(progn
(setq mm (strcat "件号" "PG" (itoa nn) "有" (itoa jieguo) "件重号" ))
(prompt "\n" )
(prompt mm )
)   ;end progn
)   ;end

)   ;end cond
(setq nn (+ 1 nn))
)   ;end repeat
(princ)
)

(defun c:chpgl()
(vl-load-com)
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(setq len (sslength ss))
(setq n 0)

(if (/= biao nil)
(setq biao nil)
)
(repeat len
(setq ent (ssname ss n))
(setq dxf (entget ent))
(setq wenzi (cdr (assoc 1 dxf)))
(setq zitou (substr wenzi 1 3))
(if (= zitou "<G")
(progn
(setq zifu (substr wenzi 4))
(setq shishu (atoi zifu))
(setq biao (cons shishu biao))
)  ;end progn
)   ;end if

(setq n (+ 1 n))
)    ;end repeat
(setq zuixiao (vl-sort biao '<))
(setq zuida (vl-sort biao '>))
(setq len1 (vl-list-length biao))
(zhao1)
(textscr)
(princ)
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(defun c:ch()
(vl-load-com)
(prompt "请选择您要查询的杆件号,但不要选择说明中的文字:")
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(setq len (sslength ss))
(setq n 0)

(if (/= biao nil)
(setq biao nil)
)
(repeat len
(setq ent (ssname ss n))
(setq dxf (entget ent))
(setq wenzi (cdr (assoc 1 dxf)))
(setq zitou (substr wenzi 1 1))
(setq dier (substr wenzi 2 1))
(setq shishu1 (atoi dier))
(setq pg (substr wenzi 1 3))
(if (and (= zitou "<") (/= shishu1 0))
(progn
(setq zifu (substr wenzi 2))
(setq shishu (atoi zifu))
(setq biao (cons shishu biao))
)  ;end progn
)   ;end if

(setq n (+ 1 n))
)    ;end repeat
(setq zuixiao (vl-sort biao '<))
(setq zuida (vl-sort biao '>))
(setq len1 (vl-list-length biao))
(zhao)
(textscr)
(princ)

)
(prompt "\n 查询普通杆件用ch命令,查询组合梁用chpgl")
(prompt "\n 普通梁杆件号仅限<*>格式,组合梁仅限<G*>格式, *为任意数字")
(prompt "\n 本程序作者:窦俊强,如有问题请与作者联系qq :53124174")

 楼主| 发表于 2008-7-14 23:05:00 | 显示全部楼层

我选择了“KLA9-2(1)”

结果是:

命令: CH 请选择您要查询的杆件号,但不要选择说明中的文字:
选择对象: 找到 1 个

选择对象:  ; 错误: 参数类型错误: consp nil

问题出在哪里?

发表于 2008-7-15 22:28:00 | 显示全部楼层

当然是文字特性的问题了

我的程序是因为我工作中需要而为自己编的

仅用于<1> <2> <3>....这样的类型的

我的程序不适合你这样的类型

发表于 2008-7-16 00:45:00 | 显示全部楼层
  1. ;find扩展 by weltion chen
  2. ;全选输入all
  3. ;*匹配模糊查找
  4. ;查找字符a,输入a
  5. ;查找字符a开头的字符串,输入a*
  6. ;查找字符a结尾的字符串,输入*a
  7. ;查找带字符a的字符串,输入*a*
  8. (defun c:finde( / ACADAPP ACADDOC ENT FINDSTR INDEX LEFTDOWNPOINT NEWSTR OBJ RIGHTUPPOINT SLTOPL SLTSET)
  9.   ;加载Vlisp函数
  10.   (vl-load-com)
  11.   (setq
  12.     ;AutoCAD
  13.     acadapp (vlax-get-acad-object)
  14.     ;当前文档
  15.     acaddoc (vla-get-activedocument acadapp)
  16.     )
  17.   ;定义关键字
  18.   (initget "I")
  19.   ;带选项的选择
  20.   (setq SltOpl (entsel "\n选择查找的文字对象或[手工输入(I)]:"))
  21.   ;是否空选
  22.   (if SltOpl
  23.     ;进行操作判断
  24.     (progn
  25.       (if (= SltOpl "I")
  26. ;手工输入
  27. (setq findstr (getstring "\n输入查找字符串,输入*匹配搜索: "))
  28. ;拾取TEXT
  29. (progn
  30.    ;图元名称
  31.    (setq ent (car SltOpl)
  32.   ;转化成VLA对象名称
  33.   obj (vlax-ename->vla-object ent)
  34.   )
  35.    ;判断是否为TEXT对象
  36.    (if (= (vla-get-objectname obj) "AcDbText")
  37.      ;OK,把字符串提出来吧
  38.      (setq findstr (vla-get-textstring obj))
  39.      )
  40.    )
  41. )
  42.       ;不管哪种方式取值,只要有值就执行查找
  43.       (if findstr
  44. (progn
  45.    ;获取满足条件的TEXT选集
  46.    (setq sltset (ssget (list '(0 . "TEXT") (cons 1 findstr)))
  47.    ;定义一个索引号
  48.   index 0
  49.   
  50.   )
  51.    ;遍历选集一个个显示或修改
  52.    (repeat (sslength sltset)
  53.      ;提取图元对象
  54.      (setq ent (ssname sltset index)
  55.     ;转化为VLA对象名称
  56.     obj (vlax-ename->vla-object ent)
  57.     )
  58.      ;获取外框
  59.      (vla-getboundingbox obj 'leftdownpoint 'rightuppoint)
  60.      ;锁定目标
  61.      (vla-zoomwindow acadapp leftdownpoint rightuppoint)
  62.      ;扩大视图范围
  63.      (vla-zoomscaled acadapp 0.5 acZoomScaledRelative)
  64.      ;修改内容
  65.      (setq newstr (getstring 0 "\n输入修改内容或<回车查找下一个,ESC退出>: "))
  66.      (if (/= newstr "")
  67.        ;替换文字内容
  68.        (vla-put-textstring obj newstr)
  69.       
  70.        )
  71.      ;next one
  72.      (setq index (1+ index))
  73.      )
  74.    )
  75. )
  76.       )
  77.     )
  78.   ;静默退出
  79.   (princ)
  80.   )
发表于 2008-7-16 01:08:00 | 显示全部楼层

 默认全选把
(setq sltset (ssget (list '(0 . "TEXT") (cons 1 findstr)))
改成
(setq sltset (ssget "X" (list '(0 . "TEXT") (cons 1 findstr)))

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

本版积分规则

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

GMT+8, 2025-6-19 02:37 , Processed in 0.172100 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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