WIS测井数据格式_第1页
WIS测井数据格式_第2页
WIS测井数据格式_第3页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、测片曲线wis文件格式转换为ASCII文本格式小软件的开发(C与Python结合开发)分类:C/C+2011-03-2512:45627人阅读评论(2)收藏举报在油田开发地质研究工作中,测井曲线是必不可少的数据文件之一。Forward软件是测井软件中非常优秀的产品,Forward中使用的是wis二进制格式,可是很多其他类型的软件不能直接识别wis格式,所以需要我们将wis格式文本格式。Forward软件有一个transfer小软件,不能实现批量处理,每次只能转换一个文件,但实际工作中通常一次要转换上白个文件,这就有点不方便了,因此,我在业余时间,阅读了Forward软件中自带的wis格式说明(

2、如下,第一章内容),利用C和Python编写了一个可以批量处理的小软件。第1章WIS测井数据文件格式WellBase平台底层数据文件使用WIS格式,WIS文件分为文件头、对象入口记录和对象数据三部分。数据存放以块为单位。WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象。通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。1.1.1 WIS文件结构文件标识WIS文件标识从文件偏移零开始,为10个字节的字符。当前版本的标识为WIS1.0。1.1.2 文件头结构头结构紧接文件标识。

3、描述WIS文件的公共信息。结构定义如下:typedefstructtagWIS_HEADWORDMachineType;WORDMaxObjectNumber;WORDObjectNumber;WORDBlockLen;DWORDEntryOffset;DWORDDataOffset;DWORDFileSize;DWORDTimeCreate;charReserved32;WIS_HEAD;偏移字节数描述02机器类型=1为PC=2为SUN=3为旧M;=4为H222允许记录的最大对象数。缺省为512个,该值可以在义件产生时给出。42当前记录的对象总数(包括删除和抛弃的对象)。62块长。WIS文件

4、对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数。84对象入口记录从文件开始的偏移量。124对象数据记录从文件开始的偏移量。164WIS文件的字为数大小。204WIS文件产生的时间。2432保留字为01.1.3对象入口对象入口描述每个对象的公共信息,开始位置由头结构给出。每个对象的描述信息前后相连。结构定义如下:typedefstructtagWIS_OBJECT_ENTRYcharName16;longStatus;shortAttribute;shortSubAttribute;DWORDPosition;DWORDBlockNum;DWORDTimeCreate;DWORDTim

5、eWrite;charReserved32;WIS_OBJECT_ENTRY;偏移字节数描述016对象的名称,以零结尾的字符申。164对象的状态:=0为正常;=1为抛弃;=2为删除。202对象的主届性:=1为通道对象;=2为表对象;=3为流对象。222对象的子届性,描述对应主届性的子届性。244对象数据体从文件开始处的偏移量。284对象数据体占用磁盘的块数。324对象产生的时间。364对象最近修改的时间04032保留字为。1.1.4对象数据体对象数据体记录各个对象的具体特性及数据。根据不同的主届性分三种类型。对象数据体在WIS文件中的位置由对象入口指定。1.1.5通道对象通道对象用来存放采集和

6、计算结果数据(如测井曲线)。分为通道信息和通道数据两部分。WIS文件将在一定时空内对某一采集或计算的物理信息数据集统称为通道数据。通道信息描述通道数据的存放形式,分为基本信息和维信息,基本信息描述信息的基本物理含义,维信息描述信息的时空特性,可以等间隔(连续)或非等间隔(离散)。最大允许有四维信息,通道信息共占用一个块空间,结构定义如下:typedefstructtagWIS_CHANNLEcharUnit8;charAliasName16;charAliasUnit16;WORDRepCode;WORDCodeLen;floatMinVal;floatMaxVal;WORDReserved;

7、WORDNumOfDimension;WIS_CHANNEL_DIMENSIONDimInfo4;WIS_CHANNEL;偏移字节数描述08对象的单位,以零结尾的字符申。816对象的别名,以零结尾的字符申。2416单位的别名,以零结尾的字符申。402对象数据类型,参见3.2.1。422数据类型的长度。444对象的最小值(测井曲线缺省左刻度值)484对象的最大值(测井曲线缺省右刻度值)522保留字为。542对象维信息数。564*56对象维信息。通道维信息结构定义如下:typedefstructtagWIS_CHANNLE_DIMENSIONcharName8;charUnit8;charAlia

8、sName16;floatStartVal;floatDelta;DWORDSamples;DWORDMaxSamples;DWORDSize;WORDRepCode;WORDReserved;WIS_CHANNEL_DIMENSION;偏移字节数描述08维的名称,以零结尾的字符申。88维的单位,以零结尾的字符申。1616维的别名,以零结尾的字符申。324维的开始值。364维的米集或计算增量。对丁离散数据,该值为0,数据中记录该维的值。404维的数据采样点数。如果该值为0,采样点数为可变值,数据中记录该值。对丁第一维数据,该值不能为0。444维的数据米样最大点数。该值仅当米样点数信息为0(可变

9、米样点)时有效,该维信息在数据中所占用的字节数通过该值计算。484该维上每一米样点所占用的字节数。522维的数据类型,参见3.2.1。542保留字为0通道数据从通道描述信息的下一块开始。下面为一个包含深度和时间维的物理信息数据体的存放顺序。第一维为深度,第二维为时间。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代表时间值

10、,当时间维信息结构中的Delta为零时,记录此值。X1,X2,,,N代表物理信息的值。1.1.6表对象表对象用来存放二维表数据,分为表信息和表数据体两个部分。表信息由不同的表项组成,每一表项称为字段。表信息结构定义如下:typedefstructtagWIS_TABLE(DWORDRecordCount;DWORDFieldCount;WIS_TABLE_FIELD*pField;WIS_TABLE;偏移字节数描述04表的记录数。44表的字段数。84指向字段信息结构的指针。字段信息结构定义如下:typedefstructtagWIS_TABLE_FIELD(charName32;WORDRep

11、Code;WORDLength;DWORDReserved;WIS_TABLE_FIELD;偏移字节数描述032字段的名称,以零结尾的字符申。322字段值的浮点类型,参见3.2.1。342字段值的长度。表数据体(记录)从表信息记录的下一块开始1.1.7流对象流对象用来存放二进制数据块。开始为4个字节的无符号长整形数,代表数据流的长度。接着为该流的二进制值。第二章WIS测井数据格式转换文本格式C程序代码代码如下:viewplaincopytoclipboardprint?1. /*Copyright(c)2011,SunYunqiang*Allrightsreserved.*Software:w

12、is2txt_win*Version:1.0*Author:SunYunqiang*EnglishName:AlexSun*ReleaseDate:18/03/2011*/10.11./*/12./*ThisProgramisforconvertingwisformatfiletotxtformatfile*/*Commandwis2txt_win.exeargs1args2*/13. /*Description:*/15./*wis2txt_win.exe:theexecutablefileascommand*/16./*args1:thefirstargumentthatisthewisf

13、ilename*/17./*args2:thesecondargumentthatisthetxtfilename*/18./*/19.20.#include<windows.h>21.#include<stdio.h>22.#include<stdlib.h>23.#include<string.h>24.#include<ctype.h>25.#include<time.h>26.#include<math.h>27.28.#defineROV6553629.#defineCOL51230.31.32./*

14、/33./*Belowblocksarethestructsofwisfile*/34./*/35.typedefstructtagWIS_HEAD36.37.WORDMachineType;/0-PC1-SUN2-IBM3-HP38.WORDMaxObjectNumber;39.WORDObjectNumber;40.WORDBlockLen;41.DWOREntryOffset;42.DWORDataOffset;43.DWORDileSize;44.time_tTimeCreate;45.charReserved32;46.WIS_HEAD;47.48.typedefstructtagW

15、IS_OBJECT_ENTRY49.50.charName16;51.longStatus;shortAttribute;/1-通道对象2-表对象3-流对象shortSubAttribute;/1-曲线对象2-波形对象3-地层测试对象4-时深时对象DWORtPosition;/对象数据体从文件开始处的偏移量DWORDBlockNum;time_tTimeCreate;time_tTimeWrite;charReserved32;WIS_OBJECT_ENTRY;60.typedefstructtagWIS_CHANNEL_DIMENSION(charName8;charUnit8;charAl

16、iasName16;floatStartVal;floatDelta;DWORDSamples;DWORDMaxSamples;DWORDSize;WORDRepCode;WORDReserved;WIS_CHANNEL_DIMENSION;74.typedefstructtagWIS_CHANNEL(charUnit8;charAliasName16;charAliasUnit16;WORDRepCode;WORDCodeLen;floatMinVal;floatMaxVal;WORDReserved;WORDNumOfDimension;WIS_CHANNEL_DIMENSIOiminfo

17、4;WIS_CHANNEL;88.typedefstructtagWIS_STREAMDWORDength;DWOROffset;WIS_STREAM;94.typedefstructtagWIS_TABLE_FIELDcharName32;WORDRepCode;WORDLength;DWOR职eserved;WIS_TABLE_FIELD;102.typedefstructtagWIS_TABLEDWOR职ecordCount;DWORDieldCount;WIS_TABLE_FIELDpField;WIS_TABLE;109.110.111. typedefstructtagWIS_TA

18、BLE_DEFAULT_FILEDcharName16;charAlias16;charUnit8;charType8;WORDLength;WORDCount;charDefVal6412;WIS_TABLE_DEFAULT_FIELD;121.122.123.typedefstructtagWIS_DEFAULT_TABLE124.(125.charName16;126.charAlias16;127.charAttrb8;128.DWORDFieldCount;129.WIS_TABLE_DEFAULT_FIEL*pField;130.WIS_DEFAULT_TABLE;131.132.

19、133.134./*曲线的信息结构体*/135.typedefstructtagCURVE_HEAD136.(137.charName16;/曲线的名字138.charUnit8;/曲线的单位139.floatstartMD;/曲线的起始深度140.floatstopMD;/曲线的结束深度141.intpointNum;/数据样点数142.intposition;/数据位置143.structtagCURVE_HEAD*next;144.CURVE_HEAD;145.146./*曲线的数据结构体*/147.typedefstructtagCURVE_DATA148.(149.charName1

20、6;/曲线的名字150.charUnit8;/曲线的单位151.floatDepthROW;/曲线的深度值152.floatValueROW;/曲线的值153.structtagCURVE_DATA*next;154.CURVE_DATA;58.159./*/160./*BelowblockistheMainprogramofprocessingwisformatfile*/161./*/162.163.intmain(intargc,char*argv)164.165.FILE*wisfile;/输入文件166.FILE*txtfile;/输出文件167.char*

21、infilename=argv1;168.char*outfilename=argv2;169./char*infilename="demoa.wis"170./char*outfilename="demoa.txt"171.172.if(argc!=3)173.174.printf("ERROR:Comman(parametersisnotdefinedcorrectly!/n");175.exit(1);79.wisfile=fopen(infilename,"rb");180.if(

22、wisfile=NULL)181.182.printf("ERROR:Readfileterminated!/n");183.exit(1);184.185.txtfile=fopen(outfilename,"w");186.if(txtfile=NULL)187.188.printf("ERROR:Writefileterminated!/n");exit(1);191./*Processwisfile,Readitandtransferittotext*/193.189. /*wis文件标识符从文件偏移0开始,为10个字节的字符

23、*/charwisid10;fread(wisid,10,1,wisfile);/printf("文件标识符:%s/n",wisid);fprintf(txtfile,"ASCIIWIS%c%c%c/n”,wisid4,wisid5,wisid6);199.190. /*头文件紧接文件标识*/WISJHEADwishead;wishead=(WIS_HEAD*)malloc(sizeof(WIS_HEAD);fseek(wisfile,10,SEEK_SET);fread(wishead,sizeof(WIS_HEAD),1,wisfile);/printf(&q

24、uot;对象入口记录从文件开始的偏移量191. EntryOffset:%d/n",wishead->EntryOffset);/printf("对象数据记录从文件开始的偏移量192. DataOffset:%d/n",wishead->DataOffset);/printf("当前记录的对象总数ObjectNumber:%d/n",wishead->ObjectNumber);208.209.193. /*对象入口,位置由头结构中EntryOffset参数指定最多512条曲线*/*curvePosition数组保存曲线数据开

25、始的位194. 置WIS_OBJECT_ENTRY->Position的值*/*curveName数组保存每条曲线的名称*/*curveNum变量文件中保存曲线的数目*/intcurvePosition512;intcurveName51216;intcurveNum=0;/curveNumistheidentiferofthecurvesnumberfseek(wisfile,wishead->EntryOffset,SEEK_SET);/fseek(wisfile,10+sizeof(WIS_HEAD),SEEK_SET);219.while(1)220.221.WIS_OBJ

26、ECT_ENTRYbjectEntry;222.Y);objectEntry=(WIS_OBJECT_ENTRYmalloc(sizeof(WIS_OBJECT_ENTR223.224.fread(objectEntry,sizeof(WIS_OBJECT_ENTRY),1,wisfile);225.if(objectEntry->Attribute=0)226.227.break;228.229.elseif(objectEntry->Attribute=1)230.231./printf("通道类型:%d/n",objectEntry->Attribu

27、te);232./printf("No.%d/n",curveNum);233./printf("曲线对象的名称Name:%s/n",objectEntry->Name);234./fprintf(outfile,"%s",objectEntry->Name);/打印曲线名于235./printf("对象数据体绝对偏移量Position:%d/n/n",objectEntry->Position);236.curvePositioncurveNum=objectEntry->Position

28、;237.inti=0;238.for(i=0;i<16;i+)239.240.curveNamecurveNumi=objectEntry->Namei;241.242.243.curveNum+;244.245.else246.247.continue;51.printf("/n%s文件的曲线数目:%d/n/n",infilename,curveNum);55./*/256./*Belowblockreadeverycurveheadinformationandputitinalink*257./*/258

29、.259./*创建链表datanode开始读取数据*/260./*num变量每条曲线的行数*/261.CURVE_HEA*Dirst_head=NULL;262.floatdelta=0.0;263.264.CURVE_HEA*data_head=NULL;265.intnum=0;266.for(num=0;num<curveNum;num+)/num相当于第几条曲线267.268.269.data_head=(CURVE_HEA*)malloc(sizeof(CURVE_HEAD);270.data_head->position=curvePositionnum;271.272

30、.fseek(wisfile,curvePositionnum,SEEK_SET);273.WIS_CHANNE1Channel;274.channel=(WIS_CHANNEL)malloc(sizeof(WIS_CHANNEL);275.fread(channel,sizeof(WIS_CHANNEL),1,wisfile);276./printf("对象的单位Unit:%s/n”,channel->Unit);277./printf("对象的别名AliasName:%s/n",channel->AliasName);278./printf(&qu

31、ot;单位的别称AliasUnit:%s/n",channel->AliasUnit);279./printf("对象的最小值MinVal:%f/n",channel->MinVal);280./printf("对象的最大值MaxVal:%f/n",channel->MaxVal);281./printf("对象维信息数NumOfDimension:%d/n",channel->NumOfDimension);282. /printf("维的开始值283. StartVal:%f/n&quo

32、t;,channel->DimInfo0.StartVal);/printf("维的增量值Delta:%f/n",channel->DimInfo0.Delta);284.284. data_head->pointNum=channel->DimInfo0.MaxSamples;/深度采样点的个数data_head->startMD=channel->DimInfo0.StartVal;/起始深度delta=channel->DimInfo0.Delta;/间隔点值data_head->stopMD=channel->D

33、imInfo0.StartVal+delta*channel->DimInfo0.MaxSamples;/结束深度289.290.inti=0;for(i=0;i<16;i+)data_head->Namei=curveNamenumi;for(i=0;i<8;i+)data_head->Uniti=channel->Uniti;300.301.printf("No.%d/t”,num+1);/曲线编亏302.printf("%s/t”,data_head->Name);/曲线名303.printf("%s/t"

34、,data_head->Unit);/曲线单位304.printf("%d/t",data_head->pointNum);/采样点数305.printf("%9.3f/t",delta);/采样点间隔306.printf("%9.3f/t",data_head->startMD);/起始深度307.printf("%9.3f/n",data_head->stopMD);/结束深度308.309.310.311. data_head->next=first_head;312.first

35、_head=data_head;313.314.315.316.317./*/318./*BelowblockisfordecidingtheminandmaxDepth,andthemaxlinenum*/319./*/320.321./从这里开始判断所有曲线中最小深度和最大深度值322.floatminDepth=0.0;323.floatmaxDepth=0.0;324.minDepth=first_head->startMD;325.maxDepth=first_head->stopMD;326.for(data_head=first_head;data_head!=NUL

36、L;data_head=data_head->next)327.328.if(minDepth>data_head->startMD)329.330.minDepth=data_head->startMD;331.332.if(maxDepth<data_head->stopMD)333.334.maxDepth=data_head->stopMD;335.336.337./printf("最小深度值:%f/n",minDepth);338./printf("最大深度值:f/n”,maxDepth);339.340./利用

37、最小最大深度值和间隔点值,确定输出的采样点数341.floatdepthROW;342.intlineNum=0;343. lineNum=(maxDepth-minDepth)/delta;/printf("采样点个数:d/n”,lineNum);345.introw=0;347.348.349.350.351.352.353.354.355.356.357.358.359.360.361.for(row=0;row<lineNum;row+)depthrow=minDepth+delta*row;/*/*Belowblockputeverypointvalueintoali

38、nkasacurve*/*/从这里开始将数据值放入曲线各自对应的链表里CURVE_DAT*first_node=NULL;CURVE_DATAIata_node=NULL;*/*/362.data_head=first_head;364.for(num=0;num<curveNum;num+)data_node=(CURVE_DATA)malloc(sizeof(CURVE_DATA);inti=0;for(i=0;i<16;i+)data_node->Namei=data_head->Namei;for(i=0;i<8;i+)data_node->Unit

39、i=data_head->Uniti;/printf("曲线名称:%s/n",data_node->Name);/printf("曲线单位:%s/n",data_node->Unit);379.380.intstartLine=0;381.for(row=0;row<lineNum;row+)382.383.if(abs(depthrow-data_head->startMD)<=delta384.&&depthrow>=data_head->startMD)385.386.startLin

40、e=row;387.break;388.389.390./printf("起始点:%d/n",startLine);391.392./fseek(wisfile,data_head->position,SEEK_SET);393.fseek(wisfile,data_head->position+2*sizeof(WIS_CHANNEL)+464EEK_SET);394.395./printf(-测试样点数%d/n",data_head->pointNum);396.for(row=0;row<lineNum;row+)397.398.fl

41、oatdata1;399.data0=-9999.000;400.if(row>=startLine&&(row-startLine)<data_head->pointNum)401.402.fread(data,sizeof(float),1,wisfile);403.data_node->Depthrow=:data_head->startMD+delta*(row-startLine);404.data_node->Valuerow=:data0;405.406.else407.408.data_node->Depthrow=:m

42、inDepth+delta*row;409.data_node->Valuerow=-9999.000;410.411./printf("读取值:f/n”,data_node->Valuerow);414.415.416.417.418.419.420.421.422.423.424.425.426.427.428.429.430.431.data_node->next=first_node;first_node=data_node;if(data_head->next=NULL)break;data_head=data_head->next;/prin

43、tf("下一条曲线名:%s/n",data_head->Name);/*/*Belowblockprintallpointvalueforeverycurve*/*Theimportantthingishowtodecidetherightdepth*/*/*/432./从这里开始写入文本434./PrintCurveNamefprintf(txtfile,"DEPTH");437.for(data_node=first_node;data_node!=NULL;data_node=data_node->next)fprintf(txtfile,"%9s",data_node->

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论