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

下载本文档

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

文档简介

1、-作者xxxx-日期xxxxWIS测井数据格式【精品文档】测井曲线wis文件格式转换为ASCII文本格式小软件的开发(C与Python结合开发) 分类: C/C+ 2011-03-25 12:45 627人阅读 评论(2) 收藏 举报 在油田开发地质研究工作中,测井曲线是必不可少的数据文件之一。Forward软件是测井软件中非常优秀的产品,Forward中使用的是wis二进制格式,可是很多其他类型的软件不能直接识别wis格式,所以需要我们将wis格式文本格式。Forward软件有一个transfer小软件,不能实现批量处理,每次只能转换一个文件,但实际工作中通常一次要转换上百个文件,这就有点不

2、方便了,因此,我在业余时间,阅读了Forward软件中自带的wis格式说明(如下,第一章内容),利用C和Python编写了一个可以批量处理的小软件。第1章 WIS测井数据文件格式WellBase平台底层数据文件使用WIS格式,WIS文件分为文件头、对象入口记录和对象数据三部分。数据存放以块为单位。WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象。通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。1.1 WIS文件结构1.1.1 文件标识WIS文件标识从文件偏移零开始,为10

3、个字节的字符。当前版本的标识为。1.1.2 文件头结构头结构紧接文件标识。描述WIS文件的公共信息。结构定义如下:typedef struct tagWIS_HEADWORDMachineType;WORDMaxObjectNumber;WORDObjectNumber;WORDBlockLen;DWORDEntryOffset;DWORDDataOffset;DWORDFileSize;DWORDTimeCreate;charReserved32;WIS_HEAD;偏移字节数描述02机器类型=1 为PC; =2为SUN; =3为IBM; =4为HP。22允许记录的最大对象数。缺省为512个,

4、该值可以在文件产生时给出。42当前记录的对象总数(包括删除和抛弃的对象)。62块长。WIS文件对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数。84对象入口记录从文件开始的偏移量。124对象数据记录从文件开始的偏移量。164WIS文件的字节数大小。204WIS文件产生的时间。2432保留字节。1.1.3 对象入口对象入口描述每个对象的公共信息,开始位置由头结构给出。每个对象的描述信息前后相连。结构定义如下:typedef struct tagWIS_OBJECT_ENTRYcharName16;longStatus;shortAttribute;shortSubAttribute;DW

5、ORDPosition;DWORDBlockNum;DWORDTimeCreate;DWORDTimeWrite;charReserved32;WIS_OBJECT_ENTRY;偏移字节数 描述016对象的名称,以零结尾的字符串。164对象的状态:=0为正常; =1为抛弃; =2为删除。202 对象的主属性:=1为通道对象; =2为表对象; =3为流对象。222对象的子属性,描述对应主属性的子属性。244对象数据体从文件开始处的偏移量。284对象数据体占用磁盘的块数。324对象产生的时间。364对象最近修改的时间。4032保留字节。1.1.4 对象数据体对象数据体记录各个对象的具体特性及数据。

6、根据不同的主属性分三种类型。对象数据体在WIS文件中的位置由对象入口指定。1.1.5 通道对象通道对象用来存放采集和计算结果数据(如测井曲线)。分为通道信息和通道数据两部分。WIS文件将在一定时空内对某一采集或计算的物理信息数据集统称为通道数据。通道信息描述通道数据的存放形式,分为基本信息和维信息,基本信息描述信息的基本物理含义,维信息描述信息的时空特性,可以等间隔(连续)或非等间隔(离散)。最大允许有四维信息,通道信息共占用一个块空间,结构定义如下: typedef struct tagWIS_CHANNLEcharUnit8;charAliasName16;charAliasUnit16;

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

8、f struct tagWIS_CHANNLE_DIMENSIONcharName8;charUnit8;charAliasName16;floatStartVal;floatDelta;DWORDSamples;DWORDMaxSamples;DWORDSize;WORDRepCode;WORDReserved;WIS_CHANNEL_DIMENSION;偏移字节数描述08维的名称,以零结尾的字符串。88维的单位,以零结尾的字符串。1616维的别名,以零结尾的字符串。324维的开始值。364维的采集或计算增量。对于离散数据,该值为0,数据中记录该维的值。404维的数据采样点数。如果该值为0,

9、采样点数为可变值,数据中记录该值。对于第一维数据,该值不能为0。444维的数据采样最大点数。该值仅当采样点数信息为0(可变采样点)时有效,该维信息在数据中所占用的字节数通过该值计算。48 4该维上每一采样点所占用的字节数。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为零时,

10、记录此值。N2代表当前深度点上的时间采样点数,当时间维信息结构中的采样点数为零时,记录此值。B1,B2, ,BN代表时间值,当时间维信息结构中的Delta为零时,记录此值。X1,X2, ,N代表物理信息的值。1.1.6 表对象表对象用来存放二维表数据,分为表信息和表数据体两个部分。表信息由不同的表项组成,每一表项称为字段。表信息结构定义如下:typedef struct tagWIS_TABLEDWORDRecordCount;DWORDFieldCount;WIS_TABLE_FIELD *pField;WIS_TABLE; 偏移字节数描述04表的记录数。44表的字段数。84指向字段信息结构

11、的指针。字段信息结构定义如下:typedef struct tagWIS_TABLE_FIELDcharName32;WORDRepCode;WORDLength;DWORDReserved;WIS_TABLE_FIELD;偏移字节数描述032 字段的名称,以零结尾的字符串。322 字段值的浮点类型,参见。342 字段值的长度。表数据体(记录)从表信息记录的下一块开始。1.1.7 流对象流对象用来存放二进制数据块。开始为4个字节的无符号长整形数,代表数据流的长度。接着为该流的二进制值。第二章 WIS测井数据格式转换文本格式C程序代码代码如下:view plaincopy to clipboar

12、dprint?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:args1args2*/14. /*Description:*/

13、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 26. #include 27. 28. #defineROW65536 29. #defineCOL512 30. 3

14、1. 32. /*/33. /*Belowblocksarethestructsofwisfile*/34. /*/35. typedefstructtagWIS_HEAD36. 37. WORDMachineType;/0-PC1-SUN2-IBM3-HP 38. WORDMaxObjectNumber;39. WORDObjectNumber;40. WORDBlockLen;41. DWORDEntryOffset;42. DWORDDataOffset;43. DWORDFileSize;44. time_tTimeCreate;45. charReserved32;46. WIS_H

15、EAD;47. 48. typedefstructtagWIS_OBJECT_ENTRY49. 50. charName16;51. longStatus;52. shortAttribute;/1-通道对象2-表对象3-流对象 53. shortSubAttribute;/1-曲线对象2-波形对象3-地层测试对象4-时深时对象 54. DWORDPosition;/对象数据体从文件开始处的偏移量 55. DWORDBlockNum;56. time_tTimeCreate;57. time_tTimeWrite;58. charReserved32;59. WIS_OBJECT_ENTRY;

16、60. 61. typedefstructtagWIS_CHANNEL_DIMENSION62. 63. charName8;64. charUnit8;65. charAliasName16;66. floatStartVal;67. floatDelta;68. DWORDSamples;69. DWORDMaxSamples;70. DWORDSize;71. WORDRepCode;72. WORDReserved;73. WIS_CHANNEL_DIMENSION;74. 75. typedefstructtagWIS_CHANNEL76. 77. charUnit8;78. cha

17、rAliasName16;79. charAliasUnit16;80. WORDRepCode;81. WORDCodeLen;82. floatMinVal;83. floatMaxVal;84. WORDReserved;85. WORDNumOfDimension;86. WIS_CHANNEL_DIMENSIONDimInfo4;87. WIS_CHANNEL;88. 89. typedefstructtagWIS_STREAM90. 91. DWORDLength;92. DWORDOffset;93. WIS_STREAM;94. 95. typedefstructtagWIS_

18、TABLE_FIELD96. 97. charName32;98. WORDRepCode;99. WORDLength;100. DWORDReserved;101. WIS_TABLE_FIELD;102. 103. typedefstructtagWIS_TABLE104. 105. DWORDRecordCount;106. DWORDFieldCount;107. WIS_TABLE_FIELD*pField;108. WIS_TABLE;109. 110. 111. typedefstructtagWIS_TABLE_DEFAULT_FILED112. 113. charName1

19、6;114. charAlias16;115. charUnit8;116. charType8;117. WORDLength;118. WORDCount;119. charDefVal6412;120. WIS_TABLE_DEFAULT_FIELD;121. 122. 123. typedefstructtagWIS_DEFAULT_TABLE124. 125. charName16;126. charAlias16;127. charAttrb8;128. DWORDFieldCount;129. WIS_TABLE_DEFAULT_FIELD*pField;130. WIS_DEF

20、AULT_TABLE;131. 132. 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. typ

21、edefstructtagCURVE_DATA148. 149. charName16;/曲线的名字 150. charUnit8;/曲线的单位 151. floatDepthROW;/曲线的深度值 152. floatValueROW;/曲线的值 153. structtagCURVE_DATA*next;154. CURVE_DATA;155. 156. 157. 158. 159. /*/160. /*BelowblockistheMainprogramofprocessingwisformatfile*/161. /*/162. 163. intmain(intargc,char*ar

22、gv)164. 165. FILE*wisfile;/输入文件 166. FILE*txtfile;/输出文件 167. char*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:Commandparametersisnotdefinedcorrectly!/n);175. exit(1);176. 177. 178. 179. wi

23、sfile=fopen(infilename,rb);180. if(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);189. exit(1);190. 191. 192. /*Processwisfile,Readitandtransferittotext*/193. 194. /*wi

24、s文件标识符从文件偏移0开始,为10个字节的字符*/195. charwisid10;196. fread(wisid,10,1,wisfile);197. /printf(文件标识符:%s/n,wisid); 198. fprintf(txtfile,ASCIIWIS%c%c%c/n,wisid4,wisid5,wisid6);199. 200. /*头文件紧接文件标识*/201. WIS_HEAD*wishead;202. wishead=(WIS_HEAD*)malloc(sizeof(WIS_HEAD);203. fseek(wisfile,10,SEEK_SET);204. frea

25、d(wishead,sizeof(WIS_HEAD),1,wisfile);205. /printf(对象入口记录从文件开始的偏移量EntryOffset:%d/n,wishead-EntryOffset); 206. /printf(对象数据记录从文件开始的偏移量DataOffset:%d/n,wishead-DataOffset); 207. /printf(当前记录的对象总数ObjectNumber:%d/n,wishead-ObjectNumber); 208. 209. 210. /*对象入口,位置由头结构中EntryOffset参数指定最多512条曲线*/211. /*curveP

26、osition数组保存曲线数据开始的位置WIS_OBJECT_ENTRY-Position的值*/212. /*curveName数组保存每条曲线的名称*/213. /*curveNum变量文件中保存曲线的数目*/214. intcurvePosition512;215. intcurveName51216;216. intcurveNum=0;/curveNumistheidentiferofthecurvesnumber 217. fseek(wisfile,wishead-EntryOffset,SEEK_SET);218. /fseek(wisfile,10+sizeof(WIS_HE

27、AD),SEEK_SET); 219. while(1)220. 221. WIS_OBJECT_ENTRY*objectEntry;222. objectEntry=(WIS_OBJECT_ENTRY*)malloc(sizeof(WIS_OBJECT_ENTRY);223. fread(objectEntry,sizeof(WIS_OBJECT_ENTRY),1,wisfile);224. 225. if(objectEntry-Attribute=0)226. 227. break;228. 229. elseif(objectEntry-Attribute=1)230. 231. /p

28、rintf(通道类型:%d/n,objectEntry-Attribute); 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;237. inti=0;238. f

29、or(i=0;iNamei;241. 242. 243. curveNum+;244. 245. else246. 247. continue;248. 249. 250. 251. printf(/n%s文件的曲线数目:%d/n/n,infilename,curveNum);252. 253. 254. 255. /*/256. /*Belowblockreadeverycurveheadinformationandputitinalink*/257. /*/258. 259. /*创建链表data_node开始读取数据*/260. /*num变量每条曲线的行数*/261. CURVE_HE

30、AD*first_head=NULL;262. floatdelta=0.0;263. 264. CURVE_HEAD*data_head=NULL;265. intnum=0;266. for(num=0;numposition=curvePositionnum;271. 272. fseek(wisfile,curvePositionnum,SEEK_SET);273. WIS_CHANNEL*channel;274. channel=(WIS_CHANNEL*)malloc(sizeof(WIS_CHANNEL);275. fread(channel,sizeof(WIS_CHANNEL

31、),1,wisfile);276. /printf(对象的单位Unit:%s/n,channel-Unit); 277. /printf(对象的别名AliasName:%s/n,channel-AliasName); 278. /printf(单位的别称AliasUnit:%s/n,channel-AliasUnit); 279. /printf(对象的最小值MinVal:%f/n,channel-MinVal); 280. /printf(对象的最大值MaxVal:%f/n,channel-MaxVal); 281. /printf(对象维信息数NumOfDimension:%d/n,cha

32、nnel-NumOfDimension); 282. /printf(维的开始值StartVal:%f/n,channel-DimInfo0.StartVal); 283. /printf(维的增量值Delta:%f/n,channel-DimInfo0.Delta); 284. 285. data_head-pointNum=channel-DimInfo0.MaxSamples;/深度采样点的个数 286. data_head-startMD=channel-DimInfo0.StartVal;/起始深度 287. delta=channel-DimInfo0.Delta;/间隔点值 28

33、8. data_head-stopMD=channel-DimInfo0.StartVal+delta*channel-DimInfo0.MaxSamples;/结束深度 289. 290. 291. inti=0;292. for(i=0;iNamei=curveNamenumi;295. 296. for(i=0;iUniti=channel-Uniti;299. 300. 301. printf(No.%d/t,num+1);/曲线编号 302. printf(%s/t,data_head-Name);/曲线名 303. printf(%s/t,data_head-Unit);/曲线单位

34、 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_head=data_head;313. 314. 315. 316. 317. /*/318. /*Belowblockisfordecidingthe

35、minandmaxDepth,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!=NULL;data_head=data_head-next)327. 328. if(minDepthdata_head-startMD)329.

36、 330. minDepth=data_head-startMD;331. 332. if(maxDepthstopMD)333. 334. maxDepth=data_head-stopMD;335. 336. 337. /printf(最小深度值:%f/n,minDepth); 338. /printf(最大深度值:%f/n,maxDepth); 339. 340. /利用最小最大深度值和间隔点值,确定输出的采样点数 341. floatdepthROW;342. intlineNum=0;343. lineNum=(maxDepth-minDepth)/delta;344. /print

37、f(采样点个数:%d/n,lineNum); 345. 346. introw=0;347. for(row=0;rowlineNum;row+)348. 349. depthrow=minDepth+delta*row;350. 351. 352. 353. 354. /*/355. /*Belowblockputeverypointvalueintoalinkasacurve*/356. /*/357. 358. /从这里开始将数据值放入曲线各自对应的链表里 359. 360. CURVE_DATA*first_node=NULL;361. CURVE_DATA*data_node=NULL;362. 363. data_head=first_head;364. 365. for(num=0;numcurveNum;num+)366. 367. data_node=(CURVE_DATA*)malloc(sizeof(CURVE_DATA);368. inti=0;369. for(i=0;iNamei=data_head-Namei;372. 373. for(i=0;iUniti=data_head-Uniti;376. 377. /printf(

温馨提示

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

评论

0/150

提交评论