WIS測井數(shù)據(jù)格式_第1頁
WIS測井數(shù)據(jù)格式_第2頁
WIS測井數(shù)據(jù)格式_第3頁
WIS測井數(shù)據(jù)格式_第4頁
WIS測井數(shù)據(jù)格式_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、-作者xxxx-日期xxxxWIS測井數(shù)據(jù)格式【精品文檔】測井曲線wis文件格式轉換為ASCII文本格式小軟件的開發(fā)(C與Python結合開發(fā)) 分類: C/C+ 2011-03-25 12:45 627人閱讀 評論(2) 收藏 舉報 在油田開發(fā)地質研究工作中,測井曲線是必不可少的數(shù)據(jù)文件之一。Forward軟件是測井軟件中非常優(yōu)秀的產(chǎn)品,F(xiàn)orward中使用的是wis二進制格式,可是很多其他類型的軟件不能直接識別wis格式,所以需要我們將wis格式文本格式。Forward軟件有一個transfer小軟件,不能實現(xiàn)批量處理,每次只能轉換一個文件,但實際工作中通常一次要轉換上百個文件,這就有點不

2、方便了,因此,我在業(yè)余時間,閱讀了Forward軟件中自帶的wis格式說明(如下,第一章內容),利用C和Python編寫了一個可以批量處理的小軟件。第1章 WIS測井數(shù)據(jù)文件格式WellBase平臺底層數(shù)據(jù)文件使用WIS格式,WIS文件分為文件頭、對象入口記錄和對象數(shù)據(jù)三部分。數(shù)據(jù)存放以塊為單位。WIS文件能存放三種類型的對象,根據(jù)對象的類型分為通道對象、表對象和流對象。通道對象一般用來存放采集數(shù)據(jù)和處理結果(如測井曲線),表對象用來存放二維表數(shù)據(jù)(如解釋結論),流對象用來存放二進制數(shù)據(jù)塊(如解釋參數(shù),用戶數(shù)據(jù))。1.1 WIS文件結構1.1.1 文件標識WIS文件標識從文件偏移零開始,為10

3、個字節(jié)的字符。當前版本的標識為。1.1.2 文件頭結構頭結構緊接文件標識。描述WIS文件的公共信息。結構定義如下:typedef struct tagWIS_HEADWORDMachineType;WORDMaxObjectNumber;WORDObjectNumber;WORDBlockLen;DWORDEntryOffset;DWORDDataOffset;DWORDFileSize;DWORDTimeCreate;charReserved32;WIS_HEAD;偏移字節(jié)數(shù)描述02機器類型=1 為PC; =2為SUN; =3為IBM; =4為HP。22允許記錄的最大對象數(shù)。缺省為512個,

4、該值可以在文件產(chǎn)生時給出。42當前記錄的對象總數(shù)(包括刪除和拋棄的對象)。62塊長。WIS文件對象占用的磁盤空間以塊為單位,該值指示每一數(shù)據(jù)塊的字節(jié)數(shù)。84對象入口記錄從文件開始的偏移量。124對象數(shù)據(jù)記錄從文件開始的偏移量。164WIS文件的字節(jié)數(shù)大小。204WIS文件產(chǎn)生的時間。2432保留字節(jié)。1.1.3 對象入口對象入口描述每個對象的公共信息,開始位置由頭結構給出。每個對象的描述信息前后相連。結構定義如下:typedef struct tagWIS_OBJECT_ENTRYcharName16;longStatus;shortAttribute;shortSubAttribute;DW

5、ORDPosition;DWORDBlockNum;DWORDTimeCreate;DWORDTimeWrite;charReserved32;WIS_OBJECT_ENTRY;偏移字節(jié)數(shù) 描述016對象的名稱,以零結尾的字符串。164對象的狀態(tài):=0為正常; =1為拋棄; =2為刪除。202 對象的主屬性:=1為通道對象; =2為表對象; =3為流對象。222對象的子屬性,描述對應主屬性的子屬性。244對象數(shù)據(jù)體從文件開始處的偏移量。284對象數(shù)據(jù)體占用磁盤的塊數(shù)。324對象產(chǎn)生的時間。364對象最近修改的時間。4032保留字節(jié)。1.1.4 對象數(shù)據(jù)體對象數(shù)據(jù)體記錄各個對象的具體特性及數(shù)據(jù)。

6、根據(jù)不同的主屬性分三種類型。對象數(shù)據(jù)體在WIS文件中的位置由對象入口指定。1.1.5 通道對象通道對象用來存放采集和計算結果數(shù)據(jù)(如測井曲線)。分為通道信息和通道數(shù)據(jù)兩部分。WIS文件將在一定時空內對某一采集或計算的物理信息數(shù)據(jù)集統(tǒng)稱為通道數(shù)據(jù)。通道信息描述通道數(shù)據(jù)的存放形式,分為基本信息和維信息,基本信息描述信息的基本物理含義,維信息描述信息的時空特性,可以等間隔(連續(xù))或非等間隔(離散)。最大允許有四維信息,通道信息共占用一個塊空間,結構定義如下: typedef struct tagWIS_CHANNLEcharUnit8;charAliasName16;charAliasUnit16;

7、WORDRepCode;WORDCodeLen;floatMinVal;floatMaxVal;WORDReserved;WORDNumOfDimension;WIS_CHANNEL_DIMENSION DimInfo4;WIS_CHANNEL;偏移字節(jié)數(shù)描述08對象的單位,以零結尾的字符串。816對象的別名,以零結尾的字符串。2416單位的別名,以零結尾的字符串。402對象數(shù)據(jù)類型,參見。422數(shù)據(jù)類型的長度。444對象的最小值(測井曲線缺省左刻度值)。484對象的最大值(測井曲線缺省右刻度值)。522保留字節(jié)。542對象維信息數(shù)。564*56對象維信息。通道維信息結構定義如下:typede

8、f struct tagWIS_CHANNLE_DIMENSIONcharName8;charUnit8;charAliasName16;floatStartVal;floatDelta;DWORDSamples;DWORDMaxSamples;DWORDSize;WORDRepCode;WORDReserved;WIS_CHANNEL_DIMENSION;偏移字節(jié)數(shù)描述08維的名稱,以零結尾的字符串。88維的單位,以零結尾的字符串。1616維的別名,以零結尾的字符串。324維的開始值。364維的采集或計算增量。對于離散數(shù)據(jù),該值為0,數(shù)據(jù)中記錄該維的值。404維的數(shù)據(jù)采樣點數(shù)。如果該值為0,

9、采樣點數(shù)為可變值,數(shù)據(jù)中記錄該值。對于第一維數(shù)據(jù),該值不能為0。444維的數(shù)據(jù)采樣最大點數(shù)。該值僅當采樣點數(shù)信息為0(可變采樣點)時有效,該維信息在數(shù)據(jù)中所占用的字節(jié)數(shù)通過該值計算。48 4該維上每一采樣點所占用的字節(jié)數(shù)。522維的數(shù)據(jù)類型,參見。542保留字節(jié)。通道數(shù)據(jù)從通道描述信息的下一塊開始。下面為一個包含深度和時間維的物理信息數(shù)據(jù)體的存放順序。第一維為深度,第二維為時間。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代表當前深度點上的時間采樣點數(shù),當時間維信息結構中的采樣點數(shù)為零時,記錄此值。B1,B2, ,BN代表時間值,當時間維信息結構中的Delta為零時,記錄此值。X1,X2, ,N代表物理信息的值。1.1.6 表對象表對象用來存放二維表數(shù)據(jù),分為表信息和表數(shù)據(jù)體兩個部分。表信息由不同的表項組成,每一表項稱為字段。表信息結構定義如下:typedef struct tagWIS_TABLEDWORDRecordCount;DWORDFieldCount;WIS_TABLE_FIELD *pField;WIS_TABLE; 偏移字節(jié)數(shù)描述04表的記錄數(shù)。44表的字段數(shù)。84指向字段信息結構

11、的指針。字段信息結構定義如下:typedef struct tagWIS_TABLE_FIELDcharName32;WORDRepCode;WORDLength;DWORDReserved;WIS_TABLE_FIELD;偏移字節(jié)數(shù)描述032 字段的名稱,以零結尾的字符串。322 字段值的浮點類型,參見。342 字段值的長度。表數(shù)據(jù)體(記錄)從表信息記錄的下一塊開始。1.1.7 流對象流對象用來存放二進制數(shù)據(jù)塊。開始為4個字節(jié)的無符號長整形數(shù),代表數(shù)據(jù)流的長度。接著為該流的二進制值。第二章 WIS測井數(shù)據(jù)格式轉換文本格式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;/對象數(shù)據(jù)體從文件開始處的偏移量 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;/數(shù)據(jù)樣點數(shù) 142. intposition;/數(shù)據(jù)位置 143. structtagCURVE_HEAD*next;144. CURVE_HEAD;145. 146. /*曲線的數(shù)據(jù)結構體*/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個字節(jié)的字符*/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(對象數(shù)據(jù)記錄從文件開始的偏移量DataOffset:%d/n,wishead-DataOffset); 207. /printf(當前記錄的對象總數(shù)ObjectNumber:%d/n,wishead-ObjectNumber); 208. 209. 210. /*對象入口,位置由頭結構中EntryOffset參數(shù)指定最多512條曲線*/211. /*curveP

26、osition數(shù)組保存曲線數(shù)據(jù)開始的位置WIS_OBJECT_ENTRY-Position的值*/212. /*curveName數(shù)組保存每條曲線的名稱*/213. /*curveNum變量文件中保存曲線的數(shù)目*/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(對象數(shù)據(jù)體絕對偏移量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文件的曲線數(shù)目:%d/n/n,infilename,curveNum);252. 253. 254. 255. /*/256. /*Belowblockreadeverycurveheadinformationandputitinalink*/257. /*/258. 259. /*創(chuàng)建鏈表data_node開始讀取數(shù)據(jù)*/260. /*num變量每條曲線的行數(shù)*/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(對象維信息數(shù)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;/深度采樣點的個數(shù) 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);/采樣點數(shù) 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. /利用最小最大深度值和間隔點值,確定輸出的采樣點數(shù) 341. floatdepthROW;342. intlineNum=0;343. lineNum=(maxDepth-minDepth)/delta;344. /print

37、f(采樣點個數(shù):%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. /從這里開始將數(shù)據(jù)值放入曲線各自對應的鏈表里 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論