双狐的数据的导出-更新于2007年9月13日

      科研工具 2007-5-16 12:09:00

    双狐的图形数据是文本格式的,可以用任何文本编辑器打开。下面是双狐(2003)数据中关于等值线的一般格式。双狐本身也提供数据的导出,但是其功能比较弱,不能导出特定格式的数据,因此要在第三方软件中使用双狐图形的数据,必须经过一定的格式转换。当数据体很大时,这将是一件很繁琐的工作。                   
                   
Layer M contour0.010000 //定义一个等值线的图层,名称为contour0.010000                   
Layer ViewAndEdit  //图层权限的定义,可见+可编辑                   
Pline.300          //定义一条等值线,其高程值300                   
20619980.87,4334898.02 //构造等值线的点的坐标                   
20619980.87,4334898.02                   
20620049.13,4334919.5                   
20620229.5,4335003                   
Pline.400  //另一条等值线定义开始                   
x,y                   
                   
    从格式上看,如果要提取双狐某一类(等值)线的数据,我们可以预先寻找"Layer M 线名称",然后读取Pline后面的高程值,再将其赋到对应坐标的后面,最后输出的文件格式如下。这样就能为多数软件所识别,或可以很容易转换为其它的格式。                   
_____________________________                   
                   
x,y,z(高程)                   
...,...,...                     
                   
______________________________                   
                   
    同样的思路,我们可以分别双狐图形数据中的断层线,含油气油气面积等。                   
    从思路上看,应该可以通过编写一个VIM的脚本文件,通过交互方式,自动提取所需要的数据,并格式化成所需要的数据格式。                    
             
2007年5月14日 更新     
                 
将下列代码保存为 *.vim 然后在Gvim 7中运行脚本即可。       
适用:数据体很大,而无法用Excel完全加载处理时。             
----------------------------------------------------           
"用于删除双弧生成的xyz文件多余信息的删除                             
"使用说明:用双狐导出xyz数据后,用此文件进行清理。             
g/\clayer.*$        /d             
"可选代码             
let ok=confirm("操作完成","&保存退出\n&取消",0,"Info")             
if ok==1             
  w             
  quit             
elseif ok==2             
  undo             
endif           
-----------------------------------------------------     
     
附:双狐生成的xyz数据格式     
LAYER M CONTOUR\MARK      
LAYER ViewAndEdit     
617524.3167,4333153.2247,-2125     
617505.9559,4333150.5308,-2125     
617494.5179,4333148.8893,-2125     
617483.0799,4333147.3238,-2125     
617471.6419,4333145.7198,-2125     
617460.2039,4333143.9937,-2125     
617451.781,4333142.5772,-2125     
617448.7659,4333142.0489,-2125     
LAYER M CONTOUR\MARK      
LAYER ViewAndEdit     
x1,y1     
x2,y2     
...     
.....     
.....     
处理后,将layer等文字信息去掉      
   
2007年5月17日更新
vim脚本还没完全掌握,不过看起来,似乎有点麻烦,不如用Pythont脚本:),下面是用Python写的一个用于提取双狐图形数据中的等值线数据示例。运行环境 python 2.5 +xpsp2(&Ubuntu 7.04) 

 1 #双狐等值线数据导出 filename: doubleFox-contour-output.py version 1.1 beta
 2 #lastUpdate(修正一些错误,适用范围更宽) 2007年5月17日 by 水南
 3 import re
 4 #import sys
 5 flag0=1
 6 while flag0:
 7     print u"请输入文件名(*.dfd)"
 8     flag=1
 9     while flag:
10         try:
11             filename=raw_input()
12             inputFile=open(filename,'r')  #获取文件名
13             flag=0
14         except IOError:
15             print u"文件不存在,请重新输入!!"
16             flag=1
17     del flag
18     outputFile=open(filename+'_contour.txt','w')#输出文件名
19     del filename
20     print u"计算中,请稍候..."
21     while 1:
22         line=inputFile.readline()
23         if not line: break
24         while re.search(r'^Layer\sM\scontour',line):
25             line=inputFile.readline()
26             line=inputFile.readline()
27             while re.search(r'^Pline\.',line):
28                 tmpStr=line[6:]
29                 line=inputFile.readline()
30                 if re.search(r'^W\s\d',line):line=inputFile.readline()
31                 while not line=='\n':
32                     outputFile.write(line[:-1]+','+tmpStr)
33                     line=inputFile.readline()
34                     if not line: break
35                 line=inputFile.readline()
36     del line,tmpStr
37     inputFile.close
38     outputFile.close
39     del inputFile
40     del outputFile
41     print u"操作完成"
42     print u"继续处理下一个文件:y / n ?"
43     flag1=raw_input()
44     if flag1=='n' or flag1=='N':
45         flag0=0
46 del flag0,flag1

2007年9月13日更新(利用双狐本身的功能)

1.只显示要导出的图形
2.文件|保存选择数据|到文件
3.利用相应的文本处理软件如Vim去掉相关的文件信息
4.如果导出的等值线数据不是XYZ格式,批量编辑|曲线|名称变为Z值,再执行以上步骤即可。

标签集:TAGS:vim python 双狐
回复Comments() 点击Count()
喜欢就顶一下

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}