乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 获取内部字符串数

[复制链接]

15

主题

52

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:09:28 | 显示全部楼层 |阅读模式
如果我有一个名为(例如边界)的层,这个层只有一个内容。
例如:

 
我的问题是,我怎么才能得到放在绳子中间的“45000”或“120000”?
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:15:36 | 显示全部楼层
  1. (defun _extract  (str)
  2.      (vl-list->string
  3.            (vl-remove-if-not
  4.                  '(lambda (x)
  5.                         (or (< 47 x 58)
  6.                             (= x 44)))
  7.                  (vl-string->list str))))

 
  1. (defun _extract  (str / a b)
  2.      (while (and (setq a (substr str 1 1))
  3.                  (not (eq a "")))
  4.            (if (or (< 47 (ascii a) 58)
  5.                    (= (ascii a) 44))
  6.                  (setq b   (strcat (if b b "") a)
  7.                        str (substr str 2))
  8.                  (setq str (substr str 2))))
  9.      b)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:17:30 | 显示全部楼层
另一个
  1. (defun PeelStrings (st / s)
  2. (if (eq (type st) 'STR)
  3.    (foreach x (vl-string->list st)
  4.      (if (member x '(47 48 49 50 51 52 53 54 55 56 57 58 44))
  5.        (setq s (cons x s))
  6.      )
  7.    )
  8. )
  9. (vl-list->string (reverse s))
  10. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:21:53 | 显示全部楼层
递归
 
  1. (defun _extract (str b / a)
  2.      (setq a (substr str 1 1))
  3.              (if (and  (not (eq a "."))
  4.                        (or (numberp (read a))(eq a ",")))
  5.                          (setq b (strcat b a) str (substr str 2))
  6.                          (setq str (substr str 2)))
  7.                      (if (eq str "")
  8.                    b (_extract str b))
  9.      )
回复

使用道具 举报

15

主题

52

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:22:20 | 显示全部楼层
至Tharwat或pBE,
 
你能给我一个例子,如何在我的层“边界”中使用这个字符串(“A=45000平方米”)吗?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:26:47 | 显示全部楼层
 
例如
 
  1. (peelstrings "A=45,000 SQ.M.")
回复

使用道具 举报

15

主题

52

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:28:56 | 显示全部楼层
谢谢塔瓦。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 07:33:45 | 显示全部楼层
 
不客气
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:37:42 | 显示全部楼层
如果需要在LISP中使用数值:
 
  1. (defun parse ( s )
  2.    (read
  3.        (vl-list->string
  4.            (apply 'append
  5.                (mapcar
  6.                    (function
  7.                        (lambda ( x ) (if (< 47 x 58) (list x)))
  8.                    )
  9.                    (vl-string->list s)
  10.                )
  11.            )
  12.        )
  13.    )
  14. )
回复

使用道具 举报

15

主题

52

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 07:39:18 | 显示全部楼层
李,我无意冒犯你,因为你的代码和Tharwat的输出几乎与我所需要的相同,但我更喜欢这样:
  1. (peelstrings "A=45,000 SQ.M.")

 
但我还有一个问题要问你们,因为我自己也试过很多次,我就是无法得到确切的代码。
我想得到该层的值(字符串)(例如“boundary”),这样我就不必每次使用“PEELSTRINGS”命令时都写这个(A=45000平方米)。
 
我想要这样:
  1. (setq Bound <code.....>)
  2. (peelstrings "bound")

 
这一个应该得到层“边界”所具有的字符串。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 15:17 , Processed in 0.432798 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表