明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2632|回复: 9

[基础] [求助]如何把Read-line 读出的一长串字符去掉“” 笨办法解决了

[复制链接]
发表于 2010-7-16 17:38:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2010-7-16 20:03:27 编辑

数据文件为:

6  1003.9  1008.7  992.8  995.4  20050411日 1593

8  993.7  993.7  978.2  978.7   1022

10  988.0  1006.5  988.0  1000.9  1607

12  1004.6  1006.4  985.6  987.0  1294

14  982.6  982.6  971.9  974.1   1040

20  970.9  970.9  958.7  963.8   20050418日 859

 

用read-line 读文件后得到了 

"6 1003.9 1008.7 992.8 995.4 20050411日 1593"

结果无法引用

如何能够把“”里的各个数据除最后一个外,分解成单独的实数给变量使用

 

如:

x0=  6

op= 1003.9

high= 1008.7

low= 992.8

co= 995.4

tx = 20050411日 1593

 

请高手指导。谢谢

发表于 2010-7-16 18:08:00 | 显示全部楼层

(setq f "6 1003.9 1008.7 992.8 995.4 2005年04月11日 1593")

(setq f1 (vl-string-search " " f))

(setq f2 (substr f 1 f1))


 

发表于 2010-7-16 18:38:00 | 显示全部楼层

(parse "6 1003.9 1008.7 992.8 995.4 2005年04月11日 1593" " ")

==>
("6" "1003.9" "1008.7" "992.8" "995.4" "2005年04月11日" "1593")

 

网内即有

Parse 函数

 楼主| 发表于 2010-7-16 19:19:00 | 显示全部楼层

感谢帮助。

二楼的代码好象只能读到第一个空格前的字符串。这个可以用 READ 函数做到。现在是如何读后面的?

 

三楼讲的 PARSE 函数 是自定义的吧? autolisp 函数手册中查不到啊???

发表于 2010-7-16 20:02:00 | 显示全部楼层

 

Parse 函数

网内即有

 

http://www.google.com/search?as_q=&hl=zh-cn&num=10&btnG=Google+%E6%90%9C%E5%B0%8B&as_epq=%28defun+Parse&as_oq=&as_eq=&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=http%3A%2F%2Fbbs.mjtd.com%2F&as_rights=&safe=images

 楼主| 发表于 2010-7-16 20:02:00 | 显示全部楼层
自己用复杂的方法做了一个解决办法:
  1. (setq ff (open dat_file "r"))
  2.   (setq data (read-line ff))
  3.   (while data
  4.     (setq x0 (read data))
  5.     (setq data (vl-string-left-trim (itoa x0) data))
  6.     (setq op (read data))
  7.     (setq data (vl-string-left-trim " " data))
  8.     (setq data (vl-string-left-trim (rtos op 2 1) data))
  9.     (setq high (read data))
  10.     (setq data (vl-string-left-trim " " data))
  11.     (setq data (vl-string-left-trim (rtos high 2 1) data))
  12.     (setq low (read data))
  13.     (setq data (vl-string-left-trim " " data))
  14.     (setq data (vl-string-left-trim (rtos low 2 1) data))
  15.     (setq co (read data))
  16.     (setq data (vl-string-left-trim " " data))
  17.     (setq data (vl-string-left-trim (rtos co 2 1) data))
  18.     (setq tx (vl-string-left-trim " " data))
 楼主| 发表于 2010-7-16 23:49:00 | 显示全部楼层
高手帮看一下,当第三次循环到第8行时,就出错了。988.0  只能删除 988   .0 会带到下一步中,造成出错。  即使把数据全改成了整数。也会出些乱坐标??
  1. (defun c:399 (/ data data1 dat_file ff high low op co tx x0 xco xhh xll
  2.         xop xvv)
  3.     (setvar "cmdecho" 0)
  4.     (setq dat_file (getfiled "展点范例" "g:\\399" "txt" 2))
  5.     (setq ff (open dat_file "r"))
  6.     (setq data (read-line ff))
  7.     (while data
  8. (setq data1 data x0 0 op 0 co 0 high 0 low 0 tx "0" xop() xvv() xco() xhh() xll() )
  9. (setq x0 (read data1))
  10. (setq data1 (vl-string-left-trim (itoa x0) data1))
  11. (setq data1 (vl-string-left-trim " " data1))
  12. (setq op (read data1))
  13. (setq data1 (vl-string-left-trim " " data1))
  14. (setq data1 (vl-string-left-trim (itoa op) data1))
  15. (setq high (read data1))
  16. (setq data1 (vl-string-left-trim " " data1))
  17. (setq data1 (vl-string-left-trim (itoa high) data1))
  18. (setq low (read data1))
  19. (setq data1 (vl-string-left-trim " " data1))
  20. (setq data1 (vl-string-left-trim (itoa low) data1))
  21. (setq co (read data1))
  22. (setq data1 (vl-string-left-trim " " data1))
  23. (setq data1 (vl-string-left-trim (itoa co) data1))
  24. (setq tx (vl-string-left-trim " " data1))
  25. (setq xop (list x0 op))
  26. (setq xco (list x0 co))
  27. (setq xhh (list x0 high))
  28. (setq xll (list x0 low))
  29. (setq xvv (list (- x0 1) (- low 10)))
  30. (if (< op co)
  31.      (command "layer" "s" "399red" "")
  32.      
  33.      (command "layer" "s" "399blue" "")
  34.      ) ;_ 结束if
  35. (command "pline" xco   xop "")
  36. (command "line" xhh xll "")
  37. (command "text" xvv 2 270 tx "")
  38. (setq data (read-line ff))
  39. ) ;_ 结束while
  40.     (close ff)
  41.     (prin1)
  42.     ;(prompt "<< 10TEST2>>自动展点串行技巧程序")
  43.     (prin1)
  44.     (setvar "cmdecho" 1)
  45.     ) ;_ 结束defun


循环到第三步时,就开始乱画线了?????
发表于 2010-7-17 13:12:00 | 显示全部楼层
_$ (setq f "6 1003.9 1008.7 992.8 995.4 2005年04月11日 1593")
"6 1003.9 1008.7 992.8 995.4 2005年04月11日 1593"
_$ (read(strcat "(" f ")"))
(6 1003.9 1008.7 992.8 995.4 2005年04月11日 1593)
发表于 2010-7-17 20:47:00 | 显示全部楼层

(defun dwgline(str)
(setq lst (read(strcat "(" str ")")))
(setq ilst '( xo op high low co tx tx2))
(mapcar '(lambda(x)   (set x nil))  ilst)
(mapcar '(lambda(x y) (set x y))  ilst lst )
(command "line" (list xo co)     (list xo op) "")
(command "line" (list xo high)   (list xo low) "")
(if  tx (command "text" (list (- xo 1) (- low 10)) 2 270 (vl-princ-to-string  tx) ))
)

(defun c:399 ()
(setq lst
'(
"6  1003.9  1008.7  992.8  995.4  2005年04月11日 1593"
"8  993.7  993.7  978.2  978.7   1022"
"10  988.0  1006.5  988.0  1000.9  1607"
"12  1004.6  1006.4  985.6  987.0  1294"
"14  982.6  982.6  971.9  974.1   1040"
"20  970.9  970.9  958.7  963.8   2005年04月18日 859"
)
)
  (foreach n lst    (dwgline n)  )
) ;_ 结束defun

发表于 2010-7-18 12:02:00 | 显示全部楼层

不用这么复杂吧,若文本文件中各字段是以标准字符分段的,如空格,或逗号,或tab等。

 

都是直接使用三楼说明的函数StrParse 先将字符串打断为表,然后再读表就行了。

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

本版积分规则

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

GMT+8, 2025-2-23 01:16 , Processed in 0.199666 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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