[求助]:从鸿业市政道路原始地面横断面线的文件中提取EICAD中的纵地面线文件
在鸿业中数据为:k0
0 214.3
-46.65 222.5
23.44 210
30 208.9
31 207.54
44.04 207.54
45 206.34
50 205.9
58.85 205
则在EICAD中相应的一行为:
0214.3
即桩号为K后面的数据,高程为第二行中0后面的数据,其他的也这样
测试文件见附件
(defun c:tt (/ txt fl ll lst)
(if (setq txt (getfiled "Select HDM file" "" "txt" 8))
(progn
(setq fl (open (findfile txt) "r"))
(while (setq str (read-line fl))
(setq ll (cons str ll))
)
(close fl)
(setq ll (reverse ll))
(while ll
(if (= (strcase (substr (car ll) 1 1))
"K"
)
(setq lst (cons (list (car ll) (cadr ll)) lst)
ll(cddr ll)
)
(setq ll (cdr ll))
)
)
(princ lst)
)
)
(princ)
) 我是要求产生一个文本文件,其内容如下:
0 214.3
20 215.2
40 214.8
60 215.8
80 218.6
100 223.1
120 220.3
140 214.7
160 209.33
180 207.18
200 209.6
220 210.4
240 207.31
260 200.32
280 199.94
300 199.49
320 200.45
340 199.73
360 199.56
380 198.96
400 199.23
420 199.26
440 199.24
460 199.26
480 199.31
500 199.42
520 199.44
540 199.55
560 199.45
580 199.46
600 199.33
620 199.33
640 199.3
660 199.12
680 199.1
700 198.95
720 199.2
740 199.52
760 199.94
780 200.4
800 200.93
820 200.26
840 201.7
860 202.1
880 202.65
900 203.22
920 203.7
940 204.94
960 205.8
980 207.3
1000 208.65
1020 209.98
1040 211.27
1060 211.14
1080 213.48
1100 214.13
1120 208.34
1140 210.2
1160 214.77
1180 215.12
1200 215.11
1220 214.72
1240 208.813
1260 204
1280 211.2
1300 213.46
1320 216.2
1340 215.7
1360 215.7
1380 217.43
1400 218.36
1420 216.14
1440 216
1460 216
1480 217.6
1500 218.6
1520 222.3
1540 222.4
1560 222.7
1580 219.18
1600 222.01
1620 219.98
1640 220.13
1660 220.67
1680 220.8
1700 222.2
1720 216.07
1740 221.29
1760 222.5
1780 224
1800 223.5
1820 221.8
1840 221.8
1860 221.03
1880 221.3
1900 221.13
1920 223.4
1940 223.8
1950 224.2
而你的程序产生的是一些数据,还不是文件
((k1950 0 224.2 ) (k1940 0 223.8 ) (k1920 0 223.4
) (k19000 221.13 ) (k1880 0 221.3 ) (k1860
0 221.03 ) (k1840 0 221.8 ) (k1820 0 221.8 )
(k1800 0 223.5 ) (k1780 0 224 ) (k1760 0 222.5
) (k1740 0 221.29 ) (k1720 0 216.07 ) (k1700 0
222.2 ) (k1680 0 220.8 ) (k1660 0 220.67 ) (k16400
220.13 ) (k1620 0 219.98 ) (k1600 0 222.01 ) (k1580 0
219.18 ) (k15600 222.7 ) (k1540 0 222.4 ) (k1520 0
222.3 ) (k15000 218.6 ) (k14800 217.6 ) (k14600 216
) (k14400 216 ) (k14200 216.14 ) (k14000 218.36 ) (k1380 0
217.43 ) (k1360 0 215.7) (k1340 0 215.7) (k1320 0 216.2) (k1300 0 213.46)
(k12800 211.2 ) (k1260 0 204) (k1240 0 208.813) (k1220 0 214.72) (k1200
0 215.11) (k1180 0 215.12) (k1160 0 214.77) (k1140 0 210.2) (k1120 0 208.34)
(k1100 0 214.13) (k1080 0 213.48) (k1060 0 211.14) (k1040 0 211.27 )
(k1020 0 209.98 ) (k1000 0 208.65 ) (k980 0 207.3 ) (k960 0
205.8 ) (k9400 204.94 ) (k920 0 203.7 ) (k900 0
203.22 ) (k880 0 202.65 ) (k860 0 202.1 )
(k840 0 201.7 ) (k820 0 200.26 ) (k800 0 200.93
) (k7800 200.4 ) (k7600 199.94 ) (k740 0
199.52 ) (k720 0 199.2 ) (k700 0 198.95 ) (k680 0 199.1 ) (k660
0 199.12 ) (k6400 199.3 ) (k620 0 199.33 ) (k600 0 199.33
) (k580 0 199.46 ) (k560 0 199.45 ) (k540 0 199.55 ) (k520 0
199.44 ) (k500 0 199.42 ) (k480 0 199.31 ) (k460 0 199.26
) (k440 0 199.24 ) (k420 0 199.26 ) (k400 0 199.23 ) (k380 0
198.96 ) (k3600 199.56 ) (k340 0 199.73 ) (k320 0 200.45
) (k300 0 199.49 ) (k280 0 199.94 ) (k2600 200.32 )
(k240 0 207.31 ) (k220 0 210.4 ) (k200 0 209.6 )
(k180 0 207.18 ) (k160 0 209.33 ) (k140 0 214.7
) (k120 0 220.3) (k100 0 223.1 ) (k80 0 218.6 )
(k600 215.8 ) (k40 0 214.8) (k20 0 215.2
) (k0 0 214.3 ))
我要求产生的文件见附件 这么简单了还不会自己写? 我对函数不熟悉
(defun c:test ()
(if (setq wjm(getfiled "请选择横断面数据文件" "" "txt" 8))
(progn
(setq n 1)
(while (findfile (setq cpwj (strcat (substr wjm 1 (- (strlen wjm) 4)) "提取结果" (itoa n) ".txt")))
(setq n (1+ n))
)
(setq wj1 (open wjm"r")
wj2 (open cpwj "w")
)
(while (setq zfc (read-line wj1))
(cond ((wcmatch zfc "k*,K*")
(setq lch (strcat (substr zfc 2) " "))
)
((wcmatch zfc "0 *")
(princ (strcat lch (rtos (cadr (read (strcat "(" zfc ")")))) "\n") wj2)
)
)
)
(close wj1)(close wj2)
)
)
(princ (strcat "提取结果已存于:" cpwj))
)
怎么都是LISP写的啊,没有C++的么 本帖最后由 f4800 于 2020-8-2 07:40 编辑
Free-Lancer 发表于 2008-10-28 16:30
大师,有个cass横断面数据,能不能通过lisp转换为 纬地hdm数据啊?
cass数据
BEGIN,0.000:1
-25.000,4.100
-20.000,4.135
-15.000,4.388
-10.000,4.779
-5.000,5.170
0.000,5.561
5.000,5.951
10.000,6.421
15.000,7.104
20.000,7.198
25.000,7.191
BEGIN,25.000:2
-25.000,3.879
-20.000,4.270
-15.000,4.661
-10.000,5.052
-5.000,5.443
0.000,5.833
5.000,6.224
10.000,6.827
15.000,6.922
20.000,6.915
25.000,6.905
纬地数据(前面的那组数据表示本组的数据组数)
0.000
5 5 -0.39 5 -0.39 5 -0.39 5 -0.25 5 -0.04
5 5 0.39 5 0.47 5 0.68 5 0.09 5 -0.01
25.000
5 5 -0.39 5 -0.39 5 -0.39 5 -0.39 5 -0.39
5 5 0.39 5 0.6 5 0.09 5 -0.01 5 -0.01
50.000
5 5 -0.39 5 -0.39 5 -0.39 5 -0.39 5 -0.21
5 5 0.45 5 0.09 5 -0.01 5 -0.01 5 -0.01
75.000
5 5 0.65 5 1.25 5 0.34 5 -0.13 5 -0.11
5 5 0.32 5 0.23 5 0.67 5 0.76 5 0.51
100.000
5 5 -0.26 5 1.38 5 0.34 5 0.41 5 0.04
5 5 0.26 5 0.26 5 0.26 5 0.26 5 0.2
125.000
5 5 -0.16 5 -0.15 5 0.59 5 0.23 5 0.23
5 5 0.15 5 0.16 5 0.16 5 0.16 5 0.18
150.000
5 5 -0.77 5 1.91 5 0.25 5 0.03 5 0.05
5 5 0.77 5 0.77 5 0.77 5 0.76 5 -0.01
175.000
5 5 -0.13 5 0.46 5 0.28 5 0.01 5 0
5 5 0.16 5 0.16 5 0.16 5 0.58 5 0.15
感谢分享,学习 感谢分享!!!
页:
[1]