测井曲线wis文件格式转换为ASCII文本格式小软件的开发(C与Python结合开发) 分类: C/C++ 2011-03-25 12:45 627人阅读 评论(2) 收藏 举报 在油田开发地质研究工作中,测井曲线是必不可少的数据文件之一Forward软件是测井软件中非常优秀的产品,Forward中使用的是wis二进制格式,可是很多其他类型的软件不能直接识别wis格式,所以需要我们将wis格式文本格式Forward软件有一个transfer小软件,不能实现批量处理,每次只能转换一个文件,但实际工作中通常一次要转换上百个文件,这就有点不方便了,因此,我在业余时间,阅读了Forward软件中自带的wis格式说明(如下,第一章内容),利用C和Python编写了一个可以批量处理的小软件第1章 WIS测井数据文件格式WellBase平台底层数据文件使用WIS格式,WIS文件分为文件头、对象入口记录和对象数据三部分数据存放以块为单位WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。
1.1 WIS文件结构1.1.1 文件标识WIS文件标识从文件偏移零开始,为10个字节的字符当前版本的标识为WIS 1.01.1.2 文件头结构头结构紧接文件标识描述WIS文件的公共信息结构定义如下:typedef struct tagWIS_HEAD{WORD MachineType;WORD MaxObjectNumber;WORD ObjectNumber;WORD BlockLen;DWORD EntryOffset;DWORD DataOffset;DWORD FileSize;DWORD TimeCreate;char Reserved[32];}WIS_HEAD;偏移 字节数 描述0 2 机器类型=1 为PC; =2为SUN; =3为IBM; =4为HP2 2 允许记录的最大对象数缺省为512个,该值可以在文件产生时给出4 2 当前记录的对象总数(包括删除和抛弃的对象)6 2 块长WIS文件对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数8 4 对象入口记录从文件开始的偏移量12 4 对象数据记录从文件开始的偏移量16 4 WIS文件的字节数大小20 4 WIS文件产生的时间。
24 32 保留字节1.1.3 对象入口对象入口描述每个对象的公共信息,开始位置由头结构给出每个对象的描述信息前后相连结构定义如下:typedef struct tagWIS_OBJECT_ENTRY{char Name[16];long Status;short Attribute;short SubAttribute;DWORD Position;DWORD BlockNum;DWORD TimeCreate;DWORD TimeWrite;char Reserved[32];}WIS_OBJECT_ENTRY;偏移 字节数 描述0 16 对象的名称,以零结尾的字符串16 4 对象的状态:=0为正常; =1为抛弃; =2为删除20 2 对象的主属性:=1为通道对象; =2为表对象; =3为流对象22 2 对象的子属性,描述对应主属性的子属性24 4 对象数据体从文件开始处的偏移量28 4 对象数据体占用磁盘的块数32 4 对象产生的时间36 4 对象最近修改的时间40 32 保留字节1.1.4 对象数据体对象数据体记录各个对象的具体特性及数据根据不同的主属性分三种类型。
对象数据体在WIS文件中的位置由对象入口指定1.1.5 通道对象通道对象用来存放采集和计算结果数据(如测井曲线)分为通道信息和通道数据两部分WIS文件将在一定时空内对某一采集或计算的物理信息数据集统称为通道数据通道信息描述通道数据的存放形式,分为基本信息和维信息,基本信息描述信息的基本物理含义,维信息描述信息的时空特性,可以等间隔(连续)或非等间隔(离散)最大允许有四维信息,通道信息共占用一个块空间,结构定义如下: typedef struct tagWIS_CHANNLE{char Unit[8];char AliasName[16];char AliasUnit[16];WORD RepCode;WORD CodeLen;float MinVal;float MaxVal;WORD Reserved;WORD NumOfDimension;WIS_CHANNEL_DIMENSION DimInfo[4];}WIS_CHANNEL;偏移 字节数 描述0 8 对象的单位,以零结尾的字符串8 16 对象的别名,以零结尾的字符串24 16 单位的别名,以零结尾的字符串40 2 对象数据类型,参见3.2.1。
42 2 数据类型的长度44 4 对象的最小值(测井曲线缺省左刻度值)48 4 对象的最大值(测井曲线缺省右刻度值)52 2 保留字节54 2 对象维信息数56 4*56 对象维信息通道维信息结构定义如下:typedef struct tagWIS_CHANNLE_DIMENSION{char Name[8];char Unit[8];char AliasName[16];float StartVal;float Delta;DWORD Samples;DWORD MaxSamples;DWORD Size;WORD RepCode;WORD Reserved;}WIS_CHANNEL_DIMENSION;偏移 字节数 描述0 8 维的名称,以零结尾的字符串8 8 维的单位,以零结尾的字符串16 16 维的别名,以零结尾的字符串32 4 维的开始值36 4 维的采集或计算增量对于离散数据,该值为0,数据中记录该维的值40 4 维的数据采样点数如果该值为0,采样点数为可变值,数据中记录该值对于第一维数据,该值不能为044 4 维的数据采样最大点数该值仅当采样点数信息为0(可变采样点)时有效,该维信息在数据中所占用的字节数通过该值计算。
48 4 该维上每一采样点所占用的字节数52 2 维的数据类型,参见3.2.154 2 保留字节通道数据从通道描述信息的下一块开始下面为一个包含深度和时间维的物理信息数据体的存放顺序第一维为深度,第二维为时间[A1]+[N2]+[B1]+X1+[B2]+X2++[BN]+XN+[A2]+[N2]+[B1]+X1+[B2]+X2++[BN]+XN+[AN]+[N2]+[B1]+X1+[B2]+X2++[BN]+XN其中:A1,A2, ,AN代表深度值,当深度维信息结构中的Delta为零时,记录此值N2代表当前深度点上的时间采样点数,当时间维信息结构中的采样点数为零时,记录此值B1,B2, ,BN代表时间值,当时间维信息结构中的Delta为零时,记录此值X1,X2, ,N代表物理信息的值1.1.6 表对象表对象用来存放二维表数据,分为表信息和表数据体两个部分表信息由不同的表项组成,每一表项称为字段表信息结构定义如下:typedef struct tagWIS_TABLE{DWORD RecordCount;DWORD FieldCount;WIS_TABLE_FIELD *pField;}WIS_TABLE; 偏移 字节数 描述0 4 表的记录数。
4 4 表的字段数8 4 指向字段信息结构的指针字段信息结构定义如下:typedef struct tagWIS_TABLE_FIELD{char Name[32];WORD RepCode;WORD Length;DWORD Reserved;}WIS_TABLE_FIELD;偏移 字节数 描述0 32 字段的名称,以零结尾的字符串32 2 字段值的浮点类型,参见3.2.134 2 字段值的长度表数据体(记录)从表信息记录的下一块开始1.1.7 流对象流对象用来存放二进制数据块开始为4个字节的无符号长整形数,代表数据流的长度接着为该流的二进制值第二章 WIS测井数据格式转换文本格式C程序代码代码如下:view plaincopy to clipboardprint?1. /*2. *Copyright(c)2011,SunYunqiang3. *Allrightsreserved.4. *Software:wis2txt_win5. *Version:1.06. *Author:SunYunqiang7. *EnglishName:AlexSun8. *ReleaseDate:18/03/20119. */10. 11. /********************************************************************/12. /**ThisProgramisforconvertingwisformatfiletotxtformatfile*/13. /**Command:wis2txt_win.exeargs1args2*/14. /**Description:*/15. /**wis2txt_win.exe:theexecutablefileascommand*/16. /**args1:thefirstargumentthatisthewisfilename*/17. /**args2:thesecondargumentthatisthetxtfilename*/18. /********************************************************************/19. 20. #include 21. #include 22. #include 23. #include 24. #include 25. #include。