WIS测井数据格式.docx

上传人:b****5 文档编号:14519221 上传时间:2023-06-24 格式:DOCX 页数:25 大小:26.54KB
下载 相关 举报
WIS测井数据格式.docx_第1页
第1页 / 共25页
WIS测井数据格式.docx_第2页
第2页 / 共25页
WIS测井数据格式.docx_第3页
第3页 / 共25页
WIS测井数据格式.docx_第4页
第4页 / 共25页
WIS测井数据格式.docx_第5页
第5页 / 共25页
WIS测井数据格式.docx_第6页
第6页 / 共25页
WIS测井数据格式.docx_第7页
第7页 / 共25页
WIS测井数据格式.docx_第8页
第8页 / 共25页
WIS测井数据格式.docx_第9页
第9页 / 共25页
WIS测井数据格式.docx_第10页
第10页 / 共25页
WIS测井数据格式.docx_第11页
第11页 / 共25页
WIS测井数据格式.docx_第12页
第12页 / 共25页
WIS测井数据格式.docx_第13页
第13页 / 共25页
WIS测井数据格式.docx_第14页
第14页 / 共25页
WIS测井数据格式.docx_第15页
第15页 / 共25页
WIS测井数据格式.docx_第16页
第16页 / 共25页
WIS测井数据格式.docx_第17页
第17页 / 共25页
WIS测井数据格式.docx_第18页
第18页 / 共25页
WIS测井数据格式.docx_第19页
第19页 / 共25页
WIS测井数据格式.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

WIS测井数据格式.docx

《WIS测井数据格式.docx》由会员分享,可在线阅读,更多相关《WIS测井数据格式.docx(25页珍藏版)》请在冰点文库上搜索。

WIS测井数据格式.docx

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.    // printf("对象入口记录从文件开始的偏移量EntryOffset:

 %d/n", wishead->EntryOffset);  

176.    // printf("对象数据记录从文件开始的偏移量DataOffset:

 %d/n", wishead->DataOffset);  

177.    // printf("当前记录的对象总数O

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2