dpaulku 发表于 2022-7-5 22:55:51

我会快速检查的。你们太棒了。
 
对不起,我漏掉了一点,不是所有的文字都是数字。。。
 
... 现在到处都是拥抱!
 
再次感谢。

alanjt 发表于 2022-7-5 22:57:04

那么,它们都以字符串作为前缀吗?发布示例图形。我要去吃午饭,但今天晚些时候我还有时间。

Lee Mac 发表于 2022-7-5 23:00:08

 
杰出的
 
为了完整性起见,仅假设小数-这应该考虑数字文本与alpha的混合:
 

(defun c:2dp ( / ss )
;; © Lee Mac 2010
(if (setq ss (ssget "_:L" '((0 . "TEXT"))))
   (
   (lambda ( i / e )
       (while (setq e (ssname ss (setq i (1+ i))))
         (entupd
         (cdr
             (assoc -1
               (entmod
               (subst
                   (cons 1
                     (apply 'strcat
                     (mapcar
                         (function
                           (lambda ( item )
                           (if (eq 'INT (type item))
                               (itoa item)
                               (if (eq 'REAL (type item))
                                 (rtos item 2 2)
                                 item
                               )
                           )
                           )
                         )
                         (LM:ParseNumbers
                           (cdr
                           (assoc 1
                               (entget e)
                           )
                           )
                         )
                     )
                     )
                   )
                   (assoc 1 (entget e)) (entget e)
               )
               )
             )
         )
         )
       )
   )
   -1
   )
)
(princ)
)

(defun LM:ParseNumbers ( str / isString isNumber lst tmp )
;; © Lee Mac 2010

(defun isString ( x lst )   
   (cond
   ( (null lst) (list x))
   
   ( (< 47 (car lst) 58)
      
       (cons x (isNumber (chr (car lst)) (cdr lst)))
   )      
   ( (= 45 (car lst))
      
       (if (and (cadr lst)
             (numberp
               (read (setq tmp (strcat "-" (chr (cadr lst)))))
             )
         )
         (cons x (isNumber tmp (cddr lst)))
         (isString (strcat x (chr (car lst))) (cdr lst))
       )
   )      
   (t (isString (strcat x (chr (car lst))) (cdr lst)))
   )
)

(defun isNumber ( x lst )   
   (cond
   ( (null lst) (list (read x)))
   
   ( (= 46 (car lst))
      
       (if (and (cadr lst)
             (numberp
               (read (setq tmp (strcat x "." (chr (cadr lst)))))
             )
         )         
         (isNumber tmp (cddr lst))
         (cons (read x) (isString (chr (car lst)) (cdr lst)))
       )
   )
   ( (< 47 (car lst) 58)
      
       (isNumber (strcat x (chr (car lst))) (cdr lst))
   )      
   (t (cons (read x) (isString (chr (car lst)) (cdr lst))))
   )
)

(if (setq lst (vl-string->list str))
   (
   (if (or (and (= 45 (car lst)) (< 47 (cadr lst) 58))
             (< 47 (car lst) 58))

       isNumber isString
   )
   (chr (car lst)) (cdr lst)
   )
)
)

alanjt 发表于 2022-7-5 23:04:18

好吧,那我就不麻烦了。

dpaulku 发表于 2022-7-5 23:07:23

 
我可以这么做,但我必须把一切都放回去!
 
C3PO按预期工作,但目前存在一些例外情况:
 
它不会解决2.500%到2.50%的问题。它完全忽略了这一点。
 
如果一个数字没有小数点,即“1255”,则将其分解为“1255.00”。
 
对于表示站点的文本,“24+00.000”。。。这被分解为“0.00”。不确定那里发生了什么,但“+”肯定是罪魁祸首。(通常我会选择24+00,但我可以用0.00生活)
 
我正在处理从POS中转储的横截面,其中有很多已经过大量编辑。我不能只是回去改变精度和再出口原因。。。嗯,说来话长。
 
无论如何,在我的问题图形堆中,我有网格线的高程(1255)、与中心线的偏移(“-10”左和“10”右)、截面上地面点的高程(1245.32)、“0+00”格式的桩号和百分比(2.55%)的坡度。此外,其他“信息文本”用于特定截面特征,如横坡、中心线和沟渠底部的高程。
 
 
“这并不奇怪,这种快速代码并不能完成所有工作。我通过一些快速搜索和替换来绕过这些缺点。。。花了两分钟。现在把我所有的数字都固定下来是一个很大的帮助。
 
如果没有其他事情的话,我已经学会了注意我在不同应用程序中运行的小数位数,因为它们会定期共享数据。
 
再次感谢大家。
 
...等待我确实有一个样本部分,这是削减建立全套,所以我会发送给你的信息。v2010年
 
埃德:当我打这个广告时,李增加了代码。这要么是你们的午休时间,要么你们是闪电打字员和机器人代码生成器!我将在冻伤瀑布的午餐时间测试最新版本。。。
67506-WESTXSECTIONS-Sec1902。图纸

Lee Mac 发表于 2022-7-5 23:10:52

你试过13号帖子里的代码了吗?

dpaulku 发表于 2022-7-5 23:13:13

正在尝试。。。命令“2dp”似乎不起作用。。。它在没有错误的情况下加载,但在加载时可能没有进行测试。

Lee Mac 发表于 2022-7-5 23:15:29

对我来说很好-你有什么错误?

Lee Mac 发表于 2022-7-5 23:20:08

 
希望我没有“打破”你的“泡泡”艾伦

alanjt 发表于 2022-7-5 23:21:33

我的泡泡?
页: 1 [2]
查看完整版本: 将舍入d的Lisp例程