乐筑天下

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

[编程交流] 从我的错误中吸取教训。。。。

[复制链接]
WHM

10

主题

37

帖子

39

银币

初来乍到

Rank: 1

铜币
44
发表于 2022-7-25 19:01:07 | 显示全部楼层 |阅读模式
大家好!
 
你有没有同时被自己的聪明才智和愚蠢完全吓呆过?
 
我的涉及数据类型……我很清楚autolisp将浮点数据缩短到第4或第5位小数(用于显示),但仍保留完整的十进制数。
 
所以我一直在尝试编写一个程序,通过API调用从服务器获取geojson数据,然后在cad中为您绘制数据(现在已经完成并工作)。将数据转换为autolisp后,我使用read函数将字符串转换为列表……这就是所有神奇之处。
 
在使用read函数查看结果时,我注意到我的经度和纬度缩短到了4位小数。所以我对自己说,我必须在所有坐标中添加“以迫使read函数将其视为字符串,所以当数据仍在字符串中时,我必须添加”。
 
我不知道是否只有我或其他人经历过这种情况,但操纵字符串数据(实际上已经是列表形式)相当困难。所以我把字符串转换成一个ASCII列表,然后我可以用它来寻找一个模式来找到坐标,并将“添加到它们中。下面的程序。。
 
我对结果非常满意,我决定将其和读取函数进行比较,结果完全一样,我的方法要慢得多。
 
所以,对于任何想知道的人来说,read将存储你的浮点数!别像我一样愚蠢!
  1. ;Example data
  2. ;(_t2 "type LineString coordinates ((26.083354482 -33.316154796) (26.083742548 -33.316186902) (26.0840749 -33.31621582) (26.084660183 -33.316272006))")
  3. (defun _t2 (datastr / datalist numlist pos prevpos gateop check prevchar gate firstchar gatecl)
  4.     (defun _insertatpos ( ins pos lst / ctr )
  5.         (setq ctr -1)
  6.         (apply 'append (mapcar '(lambda ( x ) (if (= pos (setq ctr (1+ ctr))) (list ins x) (list x))) lst))
  7.     )
  8.     (setq datalist (vl-string->list datastr)
  9.           numlist (list 45 46 48 49 50 51 52 53 54 55 56 57)
  10.           gateop (list 40)
  11.           gatecl (list 41)
  12.           pos 0)
  13.     (foreach x datalist
  14.         (if (member x gateop)
  15.             (setq gate t)
  16.             (if (and (member x gatecl) gate)
  17.                 (progn
  18.                     (if check
  19.                         (setq datalist (_insertatpos 34 pos datalist)
  20.                               pos (1+ pos)))
  21.                     (setq gate nil
  22.                           firstchar nil
  23.                           check nil)
  24.                 )
  25.             )
  26.         )  
  27.         (if gate
  28.             (progn
  29.                 (if (and (member x numlist) (member prevchar gateop))(setq firstchar t))
  30.                 (if (and (member x numlist) firstchar)
  31.                     (progn
  32.                         (if (not (= prevpos (- pos 1)))
  33.                             (progn
  34.                                 (setq datalist (_insertatpos 34 pos datalist)
  35.                                       pos (1+ pos)
  36.                                       prevpos pos
  37.                                       check t)
  38.                             )
  39.                             (setq prevpos pos)
  40.                         )
  41.                     )
  42.                     (if check
  43.                         (progn
  44.                             (setq datalist (_insertatpos 34 pos datalist)
  45.                                   pos (1+ pos)
  46.                                   check nil)
  47.                         )
  48.                     )
  49.                 )
  50.             )
  51.         )
  52.         (setq prevchar x
  53.             pos (1+ pos))
  54.     )
  55. (vl-list->string datalist)
  56. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 01:54 , Processed in 0.818133 second(s), 54 queries .

© 2020-2025 乐筑天下

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