他们叫我约翰,
下面是一个使用Gilles Chanteau的解析例程的小示例。
我已经设置了一个要分析的字符串的虚拟列表:
- (defun test ()
- (setq datalist '(";;;1.0, 2.0, 3.0, weerertttretqrt" ";;;4.0, 5.0, 6.0, weerertttretqrt" ";;;7.0, 8.0,9.0, weerertttretqrt"))
- (setq parsedlist nil)
- (foreach item datalist
- (setq parsedlist (cons (str2lst (vl-string-left-trim ";" item) ",") parsedlist))
- )
- (setq coordlist nil)
- (foreach str parsedlist
- (setq coordlist (cons (list (atof (car str)) (atof (cadr str)) (atof (caddr str))) coordlist))
- )
-
- (princ)
- )
-
- ;; str2lst by Gilles Chanteau ;
- ;; Transform a string with separator into a list of strings. ;
- ;; ;
- ;; Arguments: ;
- ;; str : string of characters ;
- ;; sep : separator characters ;
- (defun str2lst (str sep / len lst)
- (setq len (strlen sep))
- (while (setq pos (vl-string-search sep str))
- (setq lst (cons (substr str 1 pos) lst)
- str (substr str (+ len pos 1))
- )
- )
- (reverse (cons (substr str 1 pos) lst))
- )
下面是跑步后的reult:
- _$ (test)
- _$ parsedlist
- (("7.0" " 8.0" "9.0" " weerertttretqrt") ("4.0" " 5.0" " 6.0" " weerertttretqrt") ("1.0" " 2.0" " 3.0" " weerertttretqrt"))
- _$ coordlist
- ((1.0 2.0 3.0) (4.0 5.0 6.0) (7.0 8.0 9.0))
- _$
正如您在完成第一个foreach循环时所看到的,您的结果是
第一个位置的最后一项。
现在,我们运行另一个foreach循环来遍历坐标列表,结果是
列表顺序正确。
假设我们不必进行第二个循环,但您仍然希望您的列表处于正确的位置
顺序您将发布(反向列表)。
我们告诉你使用cons的唯一原因是它比append快十倍
特别是在长名单上。在你的情况下,你不必这样做,但它仍然是你需要的
我想知道。
现在,如果您发布由(vlax get entvla’points)返回的典型数据行,
也许我们可以提出建议,让你的任务更容易。
ymg公司 |