raobinhsh 发表于 2008-8-15 15:41:00

[求助]编一个将鸿业市政的横断面数据格式转化为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/>

sailorcwx 发表于 2008-8-16 15:03:00

(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)

)   
   
      

hao3ren 发表于 2008-8-18 12:59:00

两种格式可以相互转换就好了

524426071 发表于 2017-12-31 18:41:42

sailorcwx 发表于 2008-8-16 15:03


这个文本代码总是打不开,有没有完整版的呢

f4800 发表于 2020-11-11 23:39:13

非常好的。。
页: [1]
查看完整版本: [求助]编一个将鸿业市政的横断面数据格式转化为EICAD横断面数据格式的文件