[求助]编一个将鸿业市政的横断面数据格式转化为EICAD横断面数据格式的文件
<font face="宋体" size="2">编一个将鸿业市政的横断面数据格式转化为EICAD横断面数据格式的程序<br/>处理前的数据格式(鸿业市政的横断面数据格式)<br/>k0+000<br/>-23.544 275<br/>-17.314 274.44<br/>-14.413 269.46<br/>-0.612 269.14<br/>1.803 270<br/>15.63 267.5<br/>25.78 265<br/>27.829 264.10<br/>k0+040<br/>-4.923 277.5<br/>-0.891 275<br/>4.333 272.5<br/>10.768 270<br/>20.108 267.5<br/>28.327 265<br/>36.504 263.50<br/>k0+080<br/>-10.346 280<br/>-5.852 277.65<br/>5.158 272.5<br/>9.184 271.05<br/>10.536 270.06<br/>13.84 270.06<br/>16.233 269.82<br/>22.324 267.42<br/>k0+120<br/>-15.9 288.12<br/>-15.165 282.09<br/>-7.673 279.65<br/>1.259 276.90<br/>5.174 275.72<br/>14.629 272.15<br/>21.906 269.83<br/>28.575 267.11<br/>29.182 267.11<br/>30.203 265.87<br/>35.612 265.87<br/>36.55 264.32<br/>k0+160<br/>-9.376 282.5<br/>-0.886 288.10<br/>5.985 278.50<br/>10.484 277.63<br/>16.951 275.53<br/>k0+180.24<br/>-27.743 292.5<br/>-23.042 290<br/>-17.465 287.5<br/>-10.391 285<br/>-3.614 282.5<br/>2.269 280<br/>9.464 277.5<br/>16.13 275<br/>处理后的数据格式(EICAD横断面数据格式)0<br/>-27.743 292.5 -23.042 290 -17.465 287.5 -10.391 285 -3.614 282.5<br/>2.269 280 9.464 277.5 16.13 275 <br/>40<br/>-9.376 282.5 -0.886 288.1<br/>5.985 278.5 10.484 277.63 16.951 275.53 <br/>80<br/>-15.9 288.12 -15.165 282.09 -7.673<br/>279.65 1.259 276.9 5.174 275.72 14.629 272.15 21.906 269.83 28.575 267.11 29.182 267.11 30.203 265.87 35.612 265.87 36.55 264.32 <br/>120<br/>-10.346 280 -5.852 277.65<br/>5.158 272.5 9.184 271.05 10.536 270.06 13.84 270.06 16.233 269.82 22.324 267.42 <br/>160<br/>-4.923 277.5 -0.891 275<br/>4.333 272.5 10.768 270 20.108 267.5 28.327 265 36.504 263.5 <br/>180.24<br/>-23.544 275 -17.314 274.44 -14.413 269.46 -0.612 269.14<br/>0.728 269.2 1.803 270 15.63 267.5 25.78 265 27.829 264.1 <br/>说明<br/>1 桩号<br/>将K0+060、K1+060,K1+064.325等形式的数据格式转化成纯粹的数据格式,依次为。60。1060。1064.325<br/>就是将数据中的非数字字符(如K,+)删除,并取从左边第一个非0的数字后的数字,并单独写在一行<br/>2 两桩号之间的各行<br/>将两个桩号之间的各行第一个数字为负数的各行放置于一行,(第一个数字为负数的各行之间可能夹杂有<br/>第一个数字为正数的行)<br/>将两个桩号之间的各行第一个数字为正数的各行放置于一行,(第一个数字为正数的各行之间可能夹杂有<br/>第一个数字为负数的行)</font><br/> (defun c:fd(/ DATA DATA0 DIMZIN FPATH SDATA SFID SFILE SFNAME TFID TFNAME TMP );源文件
(if (setq sfile (getfiled "选择要源文件" "" "txt" 0))
(progn
;提取路径
(setq fpath (vl-filename-directory sfile)
;源文件名
sfname (vl-filename-base sfile)
;目标文件名
tfname (strcat sfname "(1)")
;打开源文件
sfid (open sfile "r")
;打开目标文件
tfid (open (strcat fpath "\\" tfname ".txt") "W")
;初始化变量
sdata '()
tmp '()
)
;读取数据
(while (setq data0 (read-line sfid))
;转化成表
(setq data (read (strcat "(" data0 ")")))
;添加入数据表中
(if (= (length data) 1)(setq sdata (append sdata (list tmp)) tmp (list data0))(setq tmp (append tmp (list data))))
)
;剔除第一个错误数据
(setq sdata (cdr sdata))
;添加最后一段数据
(setq sdata (append sdata (list tmp)))
;修改系统变量
(setq dimzin (getvar "DIMZIN"))
(setvar "DIMZIN" 12)
;数据处理并写入
(mapcar '(lambda(X / tmp1 tmpstr1 tmpstr2)
;写入标段
(setq tmp1 '())
(mapcar '(lambda(Y)
(if (and (> Y 45) (< Y 57)) (setq tmp1 (append tmp1 (list Y))))
)
(vl-string->list (car x))
)
(princ (strcat (rtos (atof (vl-list->string tmp1))) "\n") tfid)
;筛选正负值
(setq tmpstr1 "" tmpstr2 "")
(mapcar '(lambda(Y)
(if (>= (car Y) 0)
(setq tmpstr1 (strcat tmpstr1 " " (rtos (car Y)) " " (rtos (cadr Y))))
(setq tmpstr2 (strcat tmpstr2 " " (rtos (abs (car Y))) " " (rtos (cadr Y))))
)
)
(cdr x)
)
;写入负值
(princ (strcat (substr tmpstr2 2) "\n") tfid)
;写入正值
(princ (strcat (substr tmpstr1 2) "\n") tfid)
)
sdata
)
;恢复系统变量
(setvar "DIMZIN" dimzin)
;关闭源文件
(close sfid)
;关闭目标文件
(close tfid)
)
)
;well,good job boy!
(princ)
)
两种格式可以相互转换就好了 sailorcwx 发表于 2008-8-16 15:03
这个文本代码总是打不开,有没有完整版的呢 非常好的。。
页:
[1]