WIS测井数据格式.docx
- 文档编号:4354142
- 上传时间:2022-11-30
- 格式:DOCX
- 页数:21
- 大小:26.75KB
WIS测井数据格式.docx
《WIS测井数据格式.docx》由会员分享,可在线阅读,更多相关《WIS测井数据格式.docx(21页珍藏版)》请在冰豆网上搜索。
WIS测井数据格式
测井曲线wis文件格式转换为ASCII文本格式小软件的开发(C与Python结合开发)
分类:
C/C++2011-03-2512:
45627人阅读评论
(2)收藏举报
在油田开发地质研究工作中,测井曲线是必不可少的数据文件之一。
Forward软件是测井软件中非常优秀的产品,Forward中使用的是wis二进制格式,可是很多其他类型的软件不能直接识别wis格式,所以需要我们将wis格式文本格式。
Forward软件有一个transfer小软件,不能实现批量处理,每次只能转换一个文件,但实际工作中通常一次要转换上百个文件,这就有点不方便了,因此,我在业余时间,阅读了Forward软件中自带的wis格式说明(如下,第一章内容),利用C和Python编写了一个可以批量处理的小软件。
第1章WIS测井数据文件格式
WellBase平台底层数据文件使用WIS格式,WIS文件分为文件头、对象入口记录和对象数据三部分。
数据存放以块为单位。
WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象。
通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。
1.1WIS文件结构
1.1.1文件标识
WIS文件标识从文件偏移零开始,为10个字节的字符。
当前版本的标识为WIS1.0。
1.1.2文件头结构
头结构紧接文件标识。
描述WIS文件的公共信息。
结构定义如下:
typedefstructtagWIS_HEAD
{
WORDMachineType;
WORDMaxObjectNumber;
WORDObjectNumber;
WORDBlockLen;
DWORDEntryOffset;
DWORDDataOffset;
DWORDFileSize;
DWORDTimeCreate;
charReserved[32];
}WIS_HEAD;
偏移字节数描述
02机器类型=1为PC;=2为SUN;=3为IBM;
=4为HP。
22允许记录的最大对象数。
缺省为512个,该值可以在文件产生时给出。
42当前记录的对象总数(包括删除和抛弃的对象)。
62块长。
WIS文件对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数。
84对象入口记录从文件开始的偏移量。
124对象数据记录从文件开始的偏移量。
164WIS文件的字节数大小。
204WIS文件产生的时间。
2432保留字节。
1.1.3对象入口
对象入口描述每个对象的公共信息,开始位置由头结构给出。
每个对象的描述信息前后相连。
结构定义如下:
typedefstructtagWIS_OBJECT_ENTRY
{
charName[16];
longStatus;
shortAttribute;
shortSubAttribute;
DWORDPosition;
DWORDBlockNum;
DWORDTimeCreate;
DWORDTimeWrite;
charReserved[32];
}WIS_OBJECT_ENTRY;
偏移字节数描述
016对象的名称,以零结尾的字符串。
164对象的状态:
=0为正常;=1为抛弃;=2为删除。
202对象的主属性:
=1为通道对象;=2为表对象;=3为流对象。
222对象的子属性,描述对应主属性的子属性。
244对象数据体从文件开始处的偏移量。
284对象数据体占用磁盘的块数。
324对象产生的时间。
364对象最近修改的时间。
4032保留字节。
1.1.4对象数据体
对象数据体记录各个对象的具体特性及数据。
根据不同的主属性分三种类型。
对象数据体在WIS文件中的位置由对象入口指定。
1.1.5通道对象
通道对象用来存放采集和计算结果数据(如测井曲线)。
分为通道信息和通道数据两部分。
WIS文件将在一定时空内对某一采集或计算的物理信息数据集统称为通道数据。
通道信息描述通道数据的存放形式,分为基本信息和维信息,基本信息描述信息的基本物理含义,维信息描述信息的时空特性,可以等间隔(连续)或非等间隔(离散)。
最大允许有四维信息,通道信息共占用一个块空间,结构定义如下:
typedefstructtagWIS_CHANNLE
{
charUnit[8];
charAliasName[16];
charAliasUnit[16];
WORDRepCode;
WORDCodeLen;
floatMinVal;
floatMaxVal;
WORDReserved;
WORDNumOfDimension;
WIS_CHANNEL_DIMENSIONDimInfo[4];
}WIS_CHANNEL;
偏移字节数描述
08对象的单位,以零结尾的字符串。
816对象的别名,以零结尾的字符串。
2416单位的别名,以零结尾的字符串。
402对象数据类型,参见
422数据类型的长度。
444对象的最小值(测井曲线缺省左刻度值)。
484对象的最大值(测井曲线缺省右刻度值)。
522保留字节。
542对象维信息数。
564*56对象维信息。
通道维信息结构定义如下:
typedefstructtagWIS_CHANNLE_DIMENSION
{
charName[8];
charUnit[8];
charAliasName[16];
floatStartVal;
floatDelta;
DWORDSamples;
DWORDMaxSamples;
DWORDSize;
WORDRepCode;
WORDReserved;
}WIS_CHANNEL_DIMENSION;
偏移字节数描述
08维的名称,以零结尾的字符串。
88维的单位,以零结尾的字符串。
1616维的别名,以零结尾的字符串。
324维的开始值。
364维的采集或计算增量。
对于离散数据,该值为0,数据中记录该维的值。
404维的数据采样点数。
如果该值为0,采样点数为可变值,数据中记录该值。
对于第一维数据,该值不能为0。
444维的数据采样最大点数。
该值仅当采样点数信息为0(可变采样点)时有效,该维信息在数据中所占用的字节数通过该值计算。
484该维上每一采样点所占用的字节数。
522维的数据类型,参见
542保留字节。
通道数据从通道描述信息的下一块开始。
下面为一个包含深度和时间维的物理信息数据体的存放顺序。
第一维为深度,第二维为时间。
[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表对象
表对象用来存放二维表数据,分为表信息和表数据体两个部分。
表信息由不同的表项组成,每一表项称为字段。
表信息结构定义如下:
typedefstructtagWIS_TABLE
{
DWORDRecordCount;
DWORDFieldCount;
WIS_TABLE_FIELD*pField;
}WIS_TABLE;
偏移字节数描述
04表的记录数。
44表的字段数。
84指向字段信息结构的指针。
字段信息结构定义如下:
typedefstructtagWIS_TABLE_FIELD
{
charName[32];
WORDRepCode;
WORDLength;
DWORDReserved;
}WIS_TABLE_FIELD;
偏移字节数描述
032字段的名称,以零结尾的字符串。
322字段值的浮点类型,参见
342字段值的长度。
表数据体(记录)从表信息记录的下一块开始。
1.1.7流对象
流对象用来存放二进制数据块。
开始为4个字节的无符号长整形数,代表数据流的长度。
接着为该流的二进制值。
第二章 WIS测井数据格式转换文本格式C程序代码
代码如下:
viewplaincopytoclipboardprint?
1./*
2. * Copyright (c) 2011, Sun Yunqiang
3. * All rights reserved.
4. * Software:
wis2txt_win
5. * Version:
1.0
6. * Author:
Sun Yunqiang
7. * English Name:
Alex Sun
8. * Release Date:
18/03/2011
9.*/
10./** ***************************************************************** */
11./** This Program is for converting wis format file to txt format file */
12./** Command:
wis2txt_win.exe args1 args2 */
13./** Description:
*/
14./** wis2txt_win.exe:
the executable file as command */
15./** args1:
the first argument that is the wis file name */
16./** args2:
the second argument that is the txt file name */
17./** ***************************************************************** */
18.#include
19.#include
20.#include
21.#include
22.#include
23.#include
24.#include
25.#define ROW 65536
26.#define COL 512
27./* **************************************** */
28./* Below blocks are the structs of wis file */
29./* **************************************** */
30.typedef struct tagWIS_HEAD
31.{
32. WORD MachineType; // 0-PC 1-SUN 2-IBM 3-HP
33. WORD MaxObjectNumber;
34. WORD ObjectNumber;
35. WORD BlockLen;
36. DWORD EntryOffset;
37. DWORD DataOffset;
38. DWORD FileSize;
39. time_t TimeCreate;
40. char Reserved[32];
41.}WIS_HEAD;
42.typedef struct tagWIS_OBJECT_ENTRY
43.{
44. char Name[16];
45. long Status;
46. short Attribute; // 1-通道对象 2-表对象 3-流对象
47. short SubAttribute; // 1-曲线对象 2-波形对象 3-地层测试对象 4-时深时对象
48. DWORD Position; // 对象数据体从文件开始处的偏移量
49. DWORD BlockNum;
50. time_t TimeCreate;
51. time_t TimeWrite;
52. char Reserved[32];
53.}WIS_OBJECT_ENTRY;
54.typedef struct tagWIS_CHANNEL_DIMENSION
55.{
56. char Name[8];
57. char Unit[8];
58. char AliasName[16];
59. float StartVal;
60. float Delta;
61. DWORD Samples;
62. DWORD MaxSamples;
63. DWORD Size;
64. WORD RepCode;
65. WORD Reserved;
66.}WIS_CHANNEL_DIMENSION;
67.typedef struct tagWIS_CHANNEL
68.{
69. char Unit[8];
70. char AliasName[16];
71. char AliasUnit[16];
72. WORD RepCode;
73. WORD CodeLen;
74. float MinVal;
75. float MaxVal;
76. WORD Reserved;
77. WORD NumOfDimension;
78. WIS_CHANNEL_DIMENSION DimInfo[4];
79.}WIS_CHANNEL;
80.typedef struct tagWIS_STREAM
81.{
82. DWORD Length;
83. DWORD Offset;
84.}WIS_STREAM;
85.typedef struct tagWIS_TABLE_FIELD
86.{
87. char Name[32];
88. WORD RepCode;
89. WORD Length;
90. DWORD Reserved;
91.} WIS_TABLE_FIELD;
92.typedef struct tagWIS_TABLE
93.{
94. DWORD RecordCount;
95. DWORD FieldCount;
96. WIS_TABLE_FIELD *pField;
97.}WIS_TABLE;
98.typedef struct tagWIS_TABLE_DEFAULT_FILED
99.{
100. char Name[16];
101. char Alias[16];
102. char Unit[8];
103. char Type[8];
104. WORD Length;
105. WORD Count;
106. char DefVal[64][12];
107.} WIS_TABLE_DEFAULT_FIELD;
108.typedef struct tagWIS_DEFAULT_TABLE
109.{
110. char Name[16];
111. char Alias[16];
112. char Attrb[8];
113. DWORD FieldCount;
114. WIS_TABLE_DEFAULT_FIELD *pField;
115.} WIS_DEFAULT_TABLE;
116./* 曲线的信息结构体*/
117.typedef struct tagCURVE_HEAD
118.{
119. char Name[16]; // 曲线的名字
120. char Unit[8]; // 曲线的单位
121. float startMD; // 曲线的起始深度
122. float stopMD; // 曲线的结束深度
123. int pointNum; // 数据样点数
124. int position; // 数据位置
125. struct tagCURVE_HEAD *next;
126.} CURVE_HEAD;
127./* 曲线的数据结构体 */
128.typedef struct tagCURVE_DATA
129.{
130. char Name[16]; // 曲线的名字
131. char Unit[8]; // 曲线的单位
132. float Depth[ROW]; // 曲线的深度值
133. float Value[ROW]; // 曲线的值
134. struct tagCURVE_DATA *next;
135.} CURVE_DATA;
136./* ************************************************************* */
137./* Below block is the Main program of processing wis format file */
138./* ************************************************************* */
139.int main(int argc, char *argv[])
140.{
141. FILE *wisfile; // 输入文件
142. FILE *txtfile; // 输出文件
143. char *infilename = argv[1];
144. char *outfilename = argv[2];
145. // char *infilename = "demoa.wis";
146. // char *outfilename = "demoa.txt";
147. if(argc !
= 3 )
148. {
149. printf("ERROR:
Command parameters is not defined correctly!
/n");
150. exit
(1);
151. }
152. wisfile = fopen(infilename, "rb");
153. if(wisfile == NULL)
154. {
155. printf("ERROR:
Read file terminated!
/n");
156. exit
(1);
157. }
158. txtfile = fopen(outfilename, "w");
159. if(txtfile == NULL)
160. {
161. printf("ERROR:
Write file terminated!
/n");
162. exit
(1);
163. }
164. /* Process wis file, Read it and transfer it to text */
165. /** wis文件标识符从文件偏移0开始,为10个字节的字符 */
166. char wisid[10];
167. fread(wisid, 10, 1, wisfile);
168. // printf("文件标识符:
%s/n", wisid);
169. fprintf(txtfile, "ASCII WIS %c%c%c/n", wisid[4], wisid[5], wisid[6]);
170. /** 头文件紧接文件标识 */
171. WIS_HEAD *wishead;
172. wishead = (WIS_HEAD *)malloc(sizeof(WIS_HEAD));
173. fseek(wisfile, 10, SEEK_SET);
174. fread(wishead, sizeof(WIS_HEAD), 1, wisfile);
175. // pri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WIS 测井 数据格式