WIS测井数据格式
WIS测井数据中流对象解析及格式转换
石油地质与工程2021年5月PETROLEUM GEOLOGY AND ENGINEERING 第35卷第3期文章编号:1673–8217(2021)03–0041–03WIS测井数据中流对象解析及格式转换彭博1,2,谭成仟1,2,张奔1,2,孙遥1,2,杨泽1,2(1.西安石油大学地球科学与工程学院,陕西西安710065;2.陕西省油气成藏地质学重点实验室,陕西西安710065)摘要:为了解决Forward测井解释平台中的测井格式转换器不能从WIS数据文件中批量获取解释成果表,且手动获取后只能保存为ASCII格式文档,不利于获取层位、起始深度、终止深度、解释结论、特征数值及相应的曲线数据等问题,通过分析WIS数据文件的数据格式,利用Visual Basic 6.0语言编写了一款软件,能够实现从多个WIS文件中批量获取解释成果表,并将ASCII格式的解释成果表转换为EXCEL格式,同时可将所有井的解释成果表保存到一张EXCEL表格中。
此软件极大地方便了科研工作者,能显著缩短项目的开发周期、节省人力和时间、提高数据处理的正确率。
关键词:WIS数据;Forward;流对象;测井数据;格式转换;Visual Basic 6.0中图分类号:P631.84 文献标识码:AStream object analysis and format conversion in WIS data of well loggingPENG Bo1, 2, TAN Chengqian1, 2, ZHANG Ben1, 2, SUN Yao1, 2, YANG Ze1, 2(1. School of Earth Sciences and Engineering, Xi'an Shiyou University, Xi'an, Shaanxi 710065, China; 2. Key Laboratory of Oil and Gas Accumulation Geology in Shaanxi Province, Xi'an, Shaanxi 710065, China) Abstract: Acquiring the interpretation result table from WIS data file with the format converter in Forward logging interpretation platform, every time it can only manually form a WIS file parsing out the interpretation result table, each well is corresponded to an ASCII format document, the data format in the document is not conducive to obtain horizon, starting depth, ending depth, interpretation conclusion, average characteristic value and corresponding curve data. In order to solve the problem, after analyzing how WIS format data is stored, writer wrote a software with Visual Basic 6.0 for explaining results tables from multiple WIS files, the ASCII format of the results tables is converted to the EXCEL format, the interpretation results in EXCEL format for all wells are saved in an EXCEL spreadsheet. This software can shorten the project development cycle, save manpower and time, and improve the accuracy of data processing.Key words: WIS data; Forward; stream object; logging data; format conversion; Visual Basic 6.0Forward平台采用WellBase(Well Basic Analysis System Environment)作为数据底层,即WIS数据,国内大量的测井数据以WIS格式存放、处理和解释。
WIS测井数据文件格式
中国石油天然气集团公司油气勘探部 中国石油天然气集团公司油气开发部测井软件项目组石油大学(北京)石油勘探数据中心技术开发手册Software Development Kit ManualWellBasefor Windows 95、98、NT ,for Solaris测井解释平台底层目录关于本手册································································································错误!未定义书签。
第1章WellBase介绍 ·············································································错误!未定义书签。
Forward操作流程
Forward操作流程手册*******编写日期:2011年07月中石化江汉石油管理局测录井工程公司解释中心目录一、Forward软件平台简介 (1)二、Forward平台操作流程简介 (4)1 启动和退出Forward平台 (4)1.1 启动Forward平台 (4)1.2 退出Forward平台 (5)2 数据管理 (6)2.1加载demo井数据 (6)2.2 井信息管理 (9)2.3 参数文件的装入 (17)2.4 文件转换 (18)3 预处理 (20)3.1 曲线编辑 (20)3.2 曲线校深 (21)4 成果输出 (24)4.1 测井绘图 (24)4.2 制作测井解释成果表 (48)一、Forward软件平台简介Forward(Formation Oil&Gas Reservoir Well_Logging Analysis & Research & Deveplopment的缩写)是地层油气层测井评价系统的缩写。
Forward为测井分析家、地球物理学家、地质学家及其它管理者提供丰富的软件服务环境。
作为一个专业应用软件系统的支持平台,Forward考虑到测井服务的广泛性,设计上保证解释中心、服务场点、测井现场及办公室管理对软件的需求,并随测井技术(仪器及评价技术)和计算机的发展而不断发展。
考虑到测井服务面对不同的地质条件和测井仪器,平台尽可能地开放。
用户可利用平台提供的各种工具和应用模块组织测井评价工程,也可以将自己的方法及技术加入到平台中,扩展其功能,真正作为测井分析评价、测井技术研究和测井技术开发的平台。
Forward平台的构成:Forward由平台底层和应用层两大部分构成。
平台底层WellBase(Well Basic Analysis System Enviroment)为测井基本分析系统环境,它是为满足勘探、开发测井资料的分析处理而设计开发的,具有测井数据输入、测井资料预处理、测井资料基本处理、测井解释成果输出等功能,由平台数据底层和平台工具两部分组成。
DLIS和WIS格式解编
文 章编号 : 1 0 0 9 — 9 1 4 X( 2 0 1 4 ) 4 4 —0 2 2 0 — 0 】
1引宫
在我 国石 油测井 系统 中 , 随着测 井技 术与 计算 机技术 的 飞速发 展 , 各种 新 测井 仪器 和新解 释方法 的应 用 , 产 生 了大量 的测井信 息【 1 】 , 为 满足数 据读取 、 处 理、 保存 的方便 的需求 , 大量 的数据记 录技 术被设 计出来 , 以便满足用 户希 望获 得 记录完 整信息 的需求 。 这些 促使 ・ 种更 高效和更 加规 范的数据 记录格 式 的出 现即 D i g i t a l L o g I n t e r c h a n g e S t a n d a r d( D L I S ) [ 2 ] , 本 文 将介 绍 一 下解 编过 程 中用 到的 内存 映射 、 单文 档多 窗体 技 术等 关键 技术 , 与大家 一起学 习交 流 。 2 DL I S 格 式说 明 D l i s 格 式从逻 辑上 讲 分为 若干 个记 录 , 每个 记 录 由多个 字节 组成 , 每 个字 节 包 含8 位, 如图l 所示 ; 从物 理 格 式上 讲 整 个 文件 内 容依 次是 S UL ( S t o r a g e Un i t L a b e l存储 单元 标签 ) , 若 干个 逻辑 文 件 , 每个 逻辑 文 件 由若干 个可 视 记 录组 成如 图2 所示 。 文件 的记录 分为真 接记 录和 间接 记录 两部分 , 直 接记录 指不 需要 参考 其他信息 就能 比较 完整表达 自身 含义的记 录 , 直接记录 里主 要存放 该 数据 的 参数 信息 , 例如 数 据测 量公 司 、 测 量 时间 、 测量仪 器 以及 测量 曲 线的 单 位、 采样 间隔 等等描述 性 的信 息 。 间接 记录里 主要存放 的足 测量的 具体数 据 , 这 些数 据 必须 参考 前面 的直 接记 录信 息 才能确 定 其具 体 的含 义。 在具体 实 现的过程 中 , 由于D L I S 里 的数据 采用 的是反 码技 术 , 并且最 高位 是 数据 的结 构信 息 , 不参 与对应 的数 据 的数值 计算 , 所 以在读 取和 保存 数据 时 要编 写好 相应 的转 码函 数。 陔数据存 储的 好处是可 以根 据数据 的值 自动判断 用 多 小个 字节 来存储 , 避 免 了整 形数据 都使 用四 个字 节或者 八个 字节 , 或 者浮 点 型 数据 都 用四 个或者 八 个 而造 成 的存储 空 间浪 费 , 最大 限 度的 利用 了存 储 空 间, 由于成 像测 井相 对于 常规 测井数 据量 比较 大的 特点 , 该 记录 方式 可以 明显 的 减少对 硬盘存储 单元 的使 用。 该 存数方 式不 利的地方 是增加 了数据 读写 的运 算量 , 但是 由于 现在计 苒机 硬 件的配 置 已经很 高 , 额外 的运 算量 并不 会明湿 影
watch
Watch生产测井解释平台W ell_Logging A nalysis T echniqueforC asing H ole版权所有中国石油天然气集团公司开发生产局“生产测井解释平台(Watch)”是我国第一套商品化程度比较高、功能比较齐全的国产生产测井处理解释软件。
我相信通过该软件的推广、不断完善与发展,国产测井软件的整体水平将会上一个新的台阶,同时也会促进我国生产测井解释水平的提高,为我国油气田的开发做出更大贡献!中国石油天然气集团公司开发生产局局长软件开发背景推广计划Watch平台介绍平台二次开发跨平台技术今后的工作主要内容软件开发背景平台开发背景•生产测井处理解释能力参差不齐•各家重复性、作坊式开发严重•各家软件输入、输出、显示能力差、工具少、操作不方便,商业化程度低•对进口软件的依赖程度大鉴于目前我国生产测井解释单位存在以下问题:中国石油天然气集团公司开发生产局决定开发生产测井解释统一平台--Watch平台的发展过程•调研立项阶段1997年5月-1997年8月•开发方案设计阶段1997年9月-1997年10月•开发阶段1997年11月-1998年9月调研立项阶段•对全国生产测井软件进行调研1997年5月3日-1997年5月25日•成立生产测井软件系统协调小组1997年7月•在大庆召开生产测井解释软件评审会1997年8月5日-1997年8月12日开发方案设计阶段•97年9月8日向开发局领导汇报进展情况和下步安排,选定石油大学的开发方案并下函委托石油大学勘探数据中心开发生产测井解释平台•97年9月16日-98年9月19日在华北油田召开应用软件解释方法讨论会,成立软件开发项目组项目开发阶段开发场地石油大学石油勘探数据中心地址:北京学院路20号15楼电话:(010)62313136,(油网)9042655开发时间1997年10月至现在开发人员15人以下单位参加平台开发并提供了处理方法源程序:大庆生产测井研究所辽河测井公司大港测井公司华北测井公司江汉石油学院石油大学(华东)石油大学(北京)石油勘探数据中心项目开发阶段地址:北京学院路20号15楼电话:(010)62313136,(油网)9042655感谢Watch平台介绍中国石油天然气集团公司开发生产局测井软件开发项目组数据底层平台工具生产测井应用测井解释平台底层WellBaseWell B asic A nalysis S ystem E nvironmentWatch 平台框架Watch 平台由平台底层和应用层两大部分构成。
测井解释基本步骤
以关140-1441井为例一、数据转换最终目的:将收到的数据文件转换成·wis文件。
收到三个文件(·las;·rar;·jpg),将·rar解压缩,生成一个(关140-1441)文件夹,再将(·las;·rar;·jpg)放入这个新生成的(关140-1441)文件夹中,并打开此文件夹。
1、将·ASC文件转换成·dat文件打开的测井解释平台 2.7版的方法管理器—→双击文本数据转换程序—→选中所有·ASC文件拖入打开的对话框中—→点击转换—→在关140-1441文件夹中会生成相应的·dat文件—→将原有的·ASC文件可以删除。
2、将·dat和·las文件转换成·wis文件在方法管理器界面中—→双击扫描程序—→选择盘文件到盘文件(解编)—→点击确认—→在文件菜单中选引入磁盘文件—→在对话框的文件类型中选All Files(*·*)—→首选关140-1441·las文件—→点击打开—→第二个选关140-1441-1·ASC·dat—→点击打开—→第三个选关140-1441-2·ASC·dat—→点击打开—→第四个选关140-1441-3·ASC·dat—→点击打开—→第五个选关140-1441-4·ASC·dat—→点击打开—→将所有的·ASC·dat文件全部扫描完毕。
选择关140-1441·las—→点击数据解编中的解编当前文件—→在转换对话框中更改:〔名称关140-1441井综合图—→关140-1441;双击SP-3原始名—→将SP-3改为SP;双击GR-4原始名—→将GR-4改为GRa;DEMP前的“√”去掉不选。
互联网知识缩写一览
Abbreviation缩写1 专业简称Real Time Drilling Data Center实时钻井数据中心Drill钻井DDC(Drilling Data Center)WITS(we1lsite Information Transformer Specification,井场信息传输标准)[其目的在于对通过无线通讯及硬件媒体,对从井场传输到数据中心的数据定义统一的格式和信息内容]WITSML(Well site Information Transfer Standard Markup Language,井场信息传输标准标记语言)LIS测井信息标准Log InformationStandard[石油] [工] (well) loggingRTOC实时作业中心ERP:Enterprise Resource Planning,企业资源计划LBS基于位置的服务Location Based ServiceWISWIS(Well Information Standard)是根据我国勘探开发测井数据的特点设计的一种测井数据记录格式,利用该格式可记录以下测井数据:⑴常规测井曲线(深度连续)。
⑵点测井斜曲线(深度不连续)。
⑶波形数据(深度连续,时间连续,时间范围相同)。
⑷地层测试数据(深度离散,时间连续,时间范围不定)。
⑸生产测井数据(时间离散(不同次测井),深度离散,时间离散)。
⑹二维表格数据。
⑺二进制数据流(参数文件,图片,其他各种数据)。
总而言之,可将目前已有的测井数据和将来可能出现的各种测井数据,甚至处理参数卡等数据利用一个数据文件采用WIS格式保存起来。
LASLidar(激光雷达)数据格式GIS地理信息系统(Geographic Information System)OGC (Open Geospatial Consortium)标准开放地理联合会是一个参与一致进程以开发公开地理处理规格的384家公司、政府机构、大学和个人组成的国际行业联合会。
测井软件学习
Cif格式转换Wis格式Cif格式是Forward1.1微机版本所采用的数据格式;WIS格式是Forward2.0跨平台版本采用的数据格式。
为了方便Forward老用户的数据格式转换,特提供CIF格式转换WIS格式模块,转换方法既可以全部转换,也可以选择转换,其转换方法如下:1、启动Forward以后,打开方法管理器,选择“数据管理”;2、在“CIF转WIS”图标上,双击鼠标左键弹出转换器界面,其形式如下:3、用鼠标左键单击CIF格式“浏览”,弹出选择CIF格式数据文件目录对话框,其形式如下:选择需要转换的CIF格式数据文件名,用鼠标左键单击“确定”,转换器分别显示CIF格式数据文件全路径名和CIF格式所包含的测井曲线名。
4、在WIS文件输出栏,显示被转换后的WIS文件全路径名,隐含缺省工作区。
用鼠标左键单击WIS输出文件“浏览”,弹出选择WIS文件工作区目录对话框,其形式同上。
5、在曲线列表栏中,用鼠标左键分别选择需要转换的曲线,如果全部转换则左键单击“全选”。
6、用鼠标左键单击“转换”,程序自动进行转换,转换完成弹出小对话框,单击“确定”转换结束。
1、7、重复3、4、5、6转换下一个CIF格式文件。
8、左键单击“退出”关闭转换器界面。
编译连接确认新应用或原有FORTRAN程序编辑完成, 单击右下角“编辑连接”启动编辑连接过程。
若任何错误产生将显示在信息窗。
用户可根据显示信息编辑源代码重新编辑连接。
产生的可执行代码路径目录一般应选Forward\bin,文件名称可以自己定。
确认之后,编译进行,若没有错误,返回“完成编译”的信息,并询问是否加入到方法管理器,确认。
石油测井地质解释系统中测井数据格式转换
石油测井地质解释系统中测井数据格式转换摘要:为了解决石油测井数据格式转换存在的难题,要详细分析煤田测井地质解释系统的数据格式,清楚了该数据核实的存储方式,基于此,编制了格式转换程序,这个程序可以将DAT格式测井数据快速无损转换成LAS格式,但是LAS格式可以被国外大多数油田测井软件识别加载,通过功能强大的油田测井数据处理系统,将数据快速处理以及曲线绘制成图标,提升油田测井绘图效率。
关键词:石油测井;地质解释系统;测井数据格式转换一、数据格式分析以及程序设计(一)DAT数据格式分析以及程序设计DAT格式数据为二进制编码,其中文件结构包含着两个部分:首先是文件头部分,其次是数据值存储部分。
我们先说文件头部分主要就是对文件储存的测井曲线信息进行概括描述,而且这个描述信息包含有:曲线条数、终止深度、采样间隔、起始深度、起始数据指针等[1]。
接下来就是数据值存储部分主要用于存放曲线的值,曲线的值根据曲线顺序依次排列,数据类型都是单精度浮点型。
但是需要注意的是,分层数据也就是以曲线的形式进行保存,分层数据结构非常单一,解析也比较简单。
清楚数据信息的存储结构之后,可以编写程序进行数据分析。
DAT数据解析编写五个类型。
其中GLGISOperater类主要实现对DAT数据的读取功能;Segment类定义DAT数据中分层数据;NameDescription类中定义曲线名称的描述并且实现自动转换功能;LithCode中定义岩性代码描述并且实现自动识别转换功能;GLGISCurve类就是详细描述曲线的信息,同时作为曲线数据的临时存储空间。
(二)LAS数据格式分析以及程序设计LAS格式就是测井数据数字转换的最常用格式以及有关工业标准的格式,还有这个格式数据也是不同测井数据处理的软件互通互用的一个主要格式。
该程序能够方便地对LAS格式测井数据进行辅助处理,解决了LAS格式测井曲线的合并、换行模式切换以及批量转换等问题。
LAS数据格式就是由加拿大测井协会制定一种标准的测井数据格式,测井曲线就是以ASCII为编码方式,其记录了主要的图头信息以及测井数据,读写相对简单并且易于程序分析[2]。
Forward测井解释平台
平台功能介绍
作为处理软件支持中油、胜利等油田的国外测井服务。 作为处理软件支持中油、胜利等油田的国外测井服务。 作为独立的软件产品销售到中东。 为独立的软件产品销售到中东。 作为配套软件支持胜利、西仪厂测井仪器的对外销售。 作为配套软件支持胜利、西仪厂测井仪器的对外销售。
平台功能介绍
中国石油勘探与生产分公司通过三 年时间在勘探与生产分公司下辖十 三个油田单位推广应用。 三个油田单位推广应用。 大庆、辽河、华北、冀东、长庆、 大庆、辽河、华北、冀东、长庆、 四川、青海、玉门、吐哈、新疆、 四川、青海、玉门、吐哈、新疆、 塔指、吉林、大港, 塔指、吉林、大港,以及北京石油 勘探开发研究院、廊坊分院、 勘探开发研究院、廊坊分院、西北 分院、杭州分院。 分院、杭州分院。 三年内软件根据用户提出的改进意 见进行了三次升级。 见进行了三次升级。 实际使用用户由原安装时的202 实际使用用户由原安装时的202 个 800多 增加到 800多 个。
平台功能介绍
平台具极强的数据交换能力。 平台具极强的数据交换能力 。 可对国内现正应用测井系列的 各种格式数据做自动解编。 常规处理成果可转换为LA716、 LA716 各种格式数据做自动解编 。 常规处理成果可转换为 LA716 、 LIS、LAS和文本格式。 LIS、LAS和文本格式。 和文本格式
汇报内容
平台功能介绍 数据接口 成果输出 预处理 常规处理 特殊处理 油田应用实例
成果输出
平台支持功能齐全的测井绘图对象,满足测井和地质成果表述。 平台支持功能齐全的测井绘图对象,满足测井和地质成果表述。 这些对象包括原始曲线回放、岩性和流体剖面、 这些对象包括原始曲线回放、岩性和流体剖面、波形的变密度显 地层倾角的各种成果显示、取心数据和解释结论、 示、地层倾角的各种成果显示、取心数据和解释结论、文字参数 和标注等。 和标注等。
WIS文件数据格式
WIS文件数据格式3.1 WIS文件数据格式WIS(Well Information Standard)是中国石油天然气总公司推出的Forward测井处理平台所采用的一种测井数据记录格式,WIS数据格式可记录以下测井数据:⑴常规测井曲线(深度连续)。
⑵点测井斜曲线(深度不连续)。
⑶波形数据(深度连续,时间连续,时间范围相同)。
⑷地层测试数据(深度离散,时间连续,时间范围不定)。
⑸生产测井数据(时间离散(不同次测井),深度离散,时间离散)。
⑹二维表格数据。
⑺二进制数据流(参数文件,图片,其他各种数据)。
WIS文件分为文件头、对象入口记录和对象数据三部分。
数据存放以块为单位。
WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象。
通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。
3.1.1 WIS文件结构一、文件标识WIS文件标识从文件偏移零开始,为10个字节的字符。
当前版本的标识为WIS 1.0。
该标识可作为文件自动识别标志。
二、文件头结构头结构紧接文件标识,用于描述WIS文件的公共信息,共占56字节。
结构定义如表3-1-1所示。
表3-1-1 WIS文件的头结构偏移字节数类型描述0 2 WORD 机器类型=0 为PC;=1为SUN;=2为IBM;=3为HP。
2 2 WORD 允许记录的最大对象数。
缺省为512个,该值可以在文件产生时给出。
4 2 WORD 当前记录的对象总数(包括删除和抛弃的对象)。
6 2 WORD 块长。
WIS文件对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数。
8 4 DWORD 对象入口记录从文件开始的偏移量。
12 4 DWORD 对象数据记录从文件开始的偏移量。
16 4 DWORD WIS文件的字节数大小。
20 4 DWORD WIS文件产生的时间。
24 32 String 保留字节。
WIS测井数据格式中二维数据的解析与转储
工 作 中经 常 会 遇 到 二 维 测 井 数 据 。对 于测 井 方 法
研究人员来说 , S WI 等二进制存储的数据并不是一
个 理想 的实 验数 据源 ,a、X 、xe等 以 A CI LsT T E cl S I码 存 放 的 文 本 数 据 , 是 较 好 的数 据 研 究 样 本 。 然 才 而, 在对 Frad的数据 转 储 功能 测试 当 中发 现 , o r w 平
对 象人 口描 述 每 个 对象 的公 共 信 息 , 始 位 置 开
由头结构给 出 , 每个对象 的描述信 息前后 相连 ( 如
表2。 )
科 表2 WI S对象入 口描述信 息存 放方式
学
技
术
与
工
程
1 1卷
弄 清 楚 了 WI S文件 的数据 存 放 方 式后 , 可 以 就
利用. E N T平 台 中“ yt .O 命 名空间下的“ i Ss m I ” e B—
项 目基金 (0 0 84 资助 1 14 94)
第一作 者简介 : 张 宫 ( 9 7 ) 男 , 18 一 , 长江大学地 球探测 与信息 技
术专业硕士生 , 研究 方 向 : 磁共 振测 井数 据 处理 方法 及处哩 软 核
件 。E m i agog5 2 13 tm。 — alz ngn7 1 @ 6 . o lh
⑥
2 1 SiT c. nn. 0 c. eh E g g 1
Wl 井数据格 式中二维数据 的解析 与转储 S测
张 宫 何 宗斌 樊 鹤
( 油气资源 与勘探技术教育部重点实验室 ( 长江大学)荆州 4 4 2 ) 3 0 3
《Resform数据标准格式-2009-12-7》
《Resform数据标准格式-xx-12-7》第一篇:resform数据标准格式-xx-12-7resformgeooffice数据类型及数据格式所有数据在导入数据库的时候,软件可以自动识别文本格式和excel格式的文件。
包括以下各类数据:一、井位数据1.数据格式:井名(原名)(井别)纵坐标横坐标补心海拔完钻井深2.备注:括号中的项可填可不填;采用横坐标8位、纵坐标7位。
二、测井曲线数据(对应“测井曲线道”)1.数据格式:深度曲线名1曲线名2······2.备注:测井曲线数据除了文本格式和excel格式,还能够识别多种716格式、wis格式、las格式、forword格式等;多种716、wis、las、forword等格式的测井曲线数据支持批量加载。
三、离散数据(对应“离散曲线道”,包括录井数据,分析化验数据如:孔隙度分析值、渗透率分析值等)1.数据格式:深度数据名称1数据名称2······四、文本层段数据(对应“文本道”)1.数据格式:井名(层名)顶深底深文本2.备注:井名可不同,可多口井批量加载。
五、岩性数据(对应“岩性道”)1.数据格式:支持两种格式,分别是:a.顶深底深岩性(颜色、含油性、岩石名称)b.顶深底深岩性(颜色)(含油性)(层号)(井号)2.备注:括号中的项可填可不填;也可将“岩性”项中的内容写成颜色-含油性-岩性的样子,如蓝灰色含砾砂岩。
六、分层数据(对应“解释结论道”)1.数据格式:井名层名顶深底深类型2.备注:井名可不同,可多口井批量加载。
七、地层数据(对应“地层单位道”)1.数据格式:井名层名顶深底深2.备注:井名可不同,可多口井批量加载。
八、砂层数据(对应“砂层组道”)1.数据格式:井名层名顶深底深2.备注:井名可不同,可多口井批量加载。
九、油层组数据(对应“油层组道”)1.数据格式:井名层名顶深底深2.备注:井名可不同,可多口井批量加载。
WIS测井数据格式中二维数据的解析与转储
WIS测井数据格式中二维数据的解析与转储张宫;何宗斌;樊鹤【期刊名称】《科学技术与工程》【年(卷),期】2011(011)016【摘要】用Forward测井解释平台自带的格式转换器将WIS数据转换成其他格式数据的时候,二维数据不能成功地转为TXT等文本格式.剖析了WIS格式的存放方式,并在.Net平台下用C#语言编写了WIS格式转储为TXT或Excel格式的软件.此软件不但可以轻松地对测井数据进行转换,而且能够正确地解析出WIS文件中的二维波形测井曲线.%When we use the switcher of Forward log interpretation platform to convert the data from WIS to TXT or Las, two-dimensional data can't be transformed successfully. the location mode of WIS file is dissected, and this software (which can easily transform logging curves from WIS to TXT or Excel) in. Net platform with C# programming language is developed. This software not only could convert the log data easily, but also could accurately analysis and get the two-dimensional wave curves from the WIS files.【总页数】5页(P3775-3778,3782)【作者】张宫;何宗斌;樊鹤【作者单位】油气资源与勘探技术教育部重点实验室(长江大学),荆州434023;油气资源与勘探技术教育部重点实验室(长江大学),荆州434023;油气资源与勘探技术教育部重点实验室(长江大学),荆州434023【正文语种】中文【中图分类】P631.84;TP319【相关文献】1.新数据格式下自动站正点数据维护及异常处理解析 [J], 黄冬梅;石林芝;刘新立2.矿山激电测深数据格式解析及数据处理 [J], 王煜;黄先辉;张军3.地球物理测井数据格式及面向对象的数据读取 [J], 李河;王祝文;李舟波;丁永浩4.煤田测井地质解释系统中测井数据格式转换 [J], 林佳敏;张宫5.WIS测井数据中流对象解析及格式转换 [J], 彭博;谭成仟;张奔;孙遥;杨泽因版权原因,仅展示原文概要,查看原文内容请购买。
WIS文件数据格式
3.1 WIS文件数据格式WIS(Well Information Standard)是中国石油天然气总公司推出的Forward测井处理平台所采用的一种测井数据记录格式,WIS数据格式可记录以下测井数据:⑴常规测井曲线(深度连续)。
⑵点测井斜曲线(深度不连续)。
⑶波形数据(深度连续,时间连续,时间范围相同)。
⑷地层测试数据(深度离散,时间连续,时间范围不定)。
⑸生产测井数据(时间离散(不同次测井),深度离散,时间离散)。
⑹二维表格数据。
⑺二进制数据流(参数文件,图片,其他各种数据)。
WIS文件分为文件头、对象入口记录和对象数据三部分。
数据存放以块为单位。
WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象。
通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。
3.1.1 WIS文件结构一、文件标识WIS文件标识从文件偏移零开始,为10个字节的字符。
当前版本的标识为WIS 1.0。
该标识可作为文件自动识别标志。
二、文件头结构头结构紧接文件标识,用于描述WIS文件的公共信息,共占56字节。
结构定义如表3-1-1所示。
表3-1-1 WIS文件的头结构偏移 字节数 类型 描述0 2 WORD 机器类型=0 为PC;=1为SUN;=2为IBM;=3为HP。
2 2 WORD 允许记录的最大对象数。
缺省为512个,该值可以在文件产生时给出。
4 2 WORD 当前记录的对象总数(包括删除和抛弃的对象)。
6 2 WORD 块长。
WIS文件对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数。
8 4 DWORD 对象入口记录从文件开始的偏移量。
12 4 DWORD 对象数据记录从文件开始的偏移量。
16 4 DWORD WIS文件的字节数大小。
20 4 DWORD WIS文件产生的时间。
24 32 String 保留字节。
SUN工作站测井资料处理参考手册
目录一、基本知识 (1)二、数据转换 (6)三、预处理 (12)四、处理分析 (18)1、POR单孔隙度分析程序 (18)2、CRAC 复杂岩性分析程序 (21)3、SXCOAL煤层测井解释程序 (28)4、COSW碳氧比测井分析程序 (31)五、成果输出 (40)㈠.解释结论处理 (40)㈡.光栅文件处理 (42)㈢.绘图 (46)㈣.成果表取值与成果表输出 (51)㈤.LA文件数据转换为其他数据格式 (55)㈥.其他测井解释数据的转换 (55)六、特殊处理 (56)㈠、套管井 (56)㈡、固井质量评价 (70)㈢、RFT (71)㈣、大斜度井 (73)㈤、地层倾角计算机处理程序简要说明 (77)七、应用工具 (79)八、综合应用 (89)1.送小组 (89)2.在组合图后面附成果表 (89)3.外作业区井处理 (91)4.水井处理流程 (91)5.开发井处理流程 (92)附1:SUN工作站基础知识简介 (93)附2:文本编辑vi (100)附3:FORWARD2.7简明处理流程 (106)SUN工作站测井资料处理一、基本知识测井资料处理的对象为测井数据。
狭义的测井数据指的是测井曲线数据,广义的测井数据指与测井资料处理直接相关的各类数据。
依照数据的来源、特点、用途,可以对数据进行分类。
例如,可分为:图形数据(即存放在纸质等介质的数据如测井原图)、数控数据(由数控系统测量记录并以数字方式存放到磁质介质上的数据)、离散表数据(经人工处理过的离散型表格数据)、流数据(连续一组数据,如数码音乐、数码照片)。
对于各类数据,必须了解数据格式,按格式使用数据。
由于测井数据的来源、特点、用途的多样性,常常需要不同的计算机软件(共同组成一套应用系统)来进行各种测井数据处理。
为了方便测井数据的计算机处理,输出各种处理产品,一套应用系统常常规定一种通用数据格式,以方便各个计算机处理软件使用数据。
通常,一种测井数据格式包括基本信息部分和数据块部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
测井曲线wis文件格式转换为ASCII文本格式小软件的开发(C与Python结合开发)分类:C/C++ 2011-03-25 12:45 627人阅读评论(2) 收藏举报在油田开发地质研究工作中,测井曲线是必不可少的数据文件之一。
Forward软件是测井软件中非常优秀的产品,Forward中使用的是wis二进制格式,可是很多其他类型的软件不能直接识别wis格式,所以需要我们将wis格式文本格式。
Forward软件有一个transfer 小软件,不能实现批量处理,每次只能转换一个文件,但实际工作中通常一次要转换上百个文件,这就有点不方便了,因此,我在业余时间,阅读了Forward软件中自带的wis格式说明(如下,第一章内容),利用C和Python编写了一个可以批量处理的小软件。
第1章WIS测井数据文件格式WellBase平台底层数据文件使用WIS格式,WIS文件分为文件头、对象入口记录和对象数据三部分。
数据存放以块为单位。
WIS文件能存放三种类型的对象,根据对象的类型分为通道对象、表对象和流对象。
通道对象一般用来存放采集数据和处理结果(如测井曲线),表对象用来存放二维表数据(如解释结论),流对象用来存放二进制数据块(如解释参数,用户数据)。
1.1 WIS文件结构1.1.1 文件标识WIS文件标识从文件偏移零开始,为10个字节的字符。
当前版本的标识为WIS 1.0。
1.1.2 文件头结构头结构紧接文件标识。
描述WIS文件的公共信息。
结构定义如下:typedef struct tagWIS_HEAD{WORD MachineType;WORD MaxObjectNumber;WORD ObjectNumber;WORD BlockLen;DWORD DataOffset;DWORD ;DWORD TimeCreate;char Reserved[32];}WIS_HEAD;偏移字节数描述0 2 机器类型=1 为PC;=2为SUN;=3为IBM;=4为HP。
2 2 允许记录的最大对象数。
缺省为512个,该值可以在文件产生时给出。
4 2 当前记录的对象总数(包括删除和抛弃的对象)。
6 2 块长。
WIS文件对象占用的磁盘空间以块为单位,该值指示每一数据块的字节数。
8 4 对象入口记录从文件开始的偏移量。
12 4 对象数据记录从文件开始的偏移量。
16 4 WIS文件的字节数大小。
20 4 WIS文件产生的时间。
24 32 保留字节。
1.1.3 对象入口对象入口描述每个对象的公共信息,开始位置由头结构给出。
每个对象的描述信息前后相连。
结构定义如下:typedef struct tagWIS_OBJECT_ENTRY{char Name[16];long Status;short Attribute;short SubAttribute;DWORD Position;DWORD BlockNum;DWORD TimeCreate;char Reserved[32];}WIS_OBJECT_ENTRY;偏移字节数描述0 16 对象的名称,以零结尾的字符串。
16 4 对象的状态:=0为正常;=1为抛弃;=2为删除。
20 2 对象的主属性:=1为通道对象;=2为表对象;=3为流对象。
22 2 对象的子属性,描述对应主属性的子属性。
24 4 对象数据体从文件开始处的偏移量。
28 4 对象数据体占用磁盘的块数。
32 4 对象产生的时间。
36 4 对象最近修改的时间。
40 32 保留字节。
1.1.4 对象数据体对象数据体记录各个对象的具体特性及数据。
根据不同的主属性分三种类型。
对象数据体在WIS文件中的位置由对象入口指定。
1.1.5 通道对象通道对象用来存放采集和计算结果数据(如测井曲线)。
分为通道信息和通道数据两部分。
WIS文件将在一定时空内对某一采集或计算的物理信息数据集统称为通道数据。
通道信息描述通道数据的存放形式,分为基本信息和维信息,基本信息描述信息的基本物理含义,维信息描述信息的时空特性,可以等间隔(连续)或非等间隔(离散)。
最大允许有四维信息,通道信息共占用一个块空间,结构定义如下:typedef struct tagWIS_CHANNLE{char Unit[8];char AliasName[16];char AliasUnit[16];WORD R epCode;WORD C odeLen;float MinVal;float MaxVal;WORD R eserved;WORD N umOfDimension;WIS_CHANNEL_DIMENSION DimInfo[4];}WIS_CHANNEL;偏移字节数描述0 8 对象的单位,以零结尾的字符串。
8 16 对象的别名,以零结尾的字符串。
24 16 单位的别名,以零结尾的字符串。
40 2 对象数据类型,参见3.2.1。
42 2 数据类型的长度。
44 4 对象的最小值(测井曲线缺省左刻度值)。
48 4 对象的最大值(测井曲线缺省右刻度值)。
52 2 保留字节。
54 2 对象维信息数。
56 4*56 对象维信息。
通道维信息结构定义如下:typedef struct tagWIS_CHANNLE_DIMENSION{char Name[8];char Unit[8];char AliasName[16];float StartVal;float Delta;DWORD Samples;DWORD MaxSamples;DWORD Size;WORD RepCode;WORD Reserved;}WIS_CHANNEL_DIMENSION;偏移字节数描述0 8 维的名称,以零结尾的字符串。
8 8 维的单位,以零结尾的字符串。
16 16 维的别名,以零结尾的字符串。
32 4 维的开始值。
36 4 维的采集或计算增量。
对于离散数据,该值为0,数据中记录该维的值。
40 4 维的数据采样点数。
如果该值为0,采样点数为可变值,数据中记录该值。
对于第一维数据,该值不能为0。
44 4 维的数据采样最大点数。
该值仅当采样点数信息为0(可变采样点)时有效,该维信息在数据中所占用的字节数通过该值计算。
48 4 该维上每一采样点所占用的字节数。
52 2 维的数据类型,参见3.2.1。
54 2 保留字节。
通道数据从通道描述信息的下一块开始。
下面为一个包含深度和时间维的物理信息数据体的存放顺序。
第一维为深度,第二维为时间。
[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 表对象表对象用来存放二维表数据,分为表信息和表数据体两个部分。
表信息由不同的表项组成,每一表项称为字段。
表信息结构定义如下:typedef struct tagWIS_TABLE{DWORD RecordCount;DWORD FieldCount;WIS_TABLE_FIELD *pField;}WIS_TABLE;偏移字节数描述0 4 表的记录数。
4 4 表的字段数。
8 4 指向字段信息结构的指针。
字段信息结构定义如下:typedef struct tagWIS_TABLE_FIELD{char Name[32];WORD RepCode;WORD Length;DWORD Reserved;}WIS_TABLE_FIELD;偏移字节数描述0 32 字段的名称,以零结尾的字符串。
32 2 字段值的浮点类型,参见3.2.1。
34 2 字段值的长度。
表数据体(记录)从表信息记录的下一块开始。
1.1.7 流对象流对象用来存放二进制数据块。
开始为4个字节的无符号长整形数,代表数据流的长度。
接着为该流的二进制值。
第二章WIS测井数据格式转换文本格式C程序代码代码如下:view plaincopy to clipboardprint?1. /*2. * Copyright (c) 2011, Sun Yunqiang3. * All rights reserved.4. * Software: wis2txt_win5. * Version: 1.06. * Author: Sun Yunqiang7. * English Name: Alex Sun8. * Release Date: 18/03/20119. */10.11. /** ***************************************************************** */12./** This Program is for converting wis format txt format file */13. /** Command: wis2txt_win.exe args1 args2 */14. /** Description:*/15. /** wis2txt_win.exe: the executable command */16. /** args1: the first argument that is the wis */17. /** args2: the second argument that is the txt */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. #define ROW 6553629. #define COL 51230.31.32. /* **************************************** */33. /* Below blocks are the structs of wis file */34. /* **************************************** */35. typedef struct tagWIS_HEAD36. {37. WORD MachineType; // 0-PC 1-SUN 2-IBM 3-HP38. WORD MaxObjectNumber;39. WORD ObjectNumber;40. WORD BlockLen;41. DWORD EntryOffset;42. DWORD DataOffset;43. DWORD ;44. time_t TimeCreate;45. char Reserved[32];46. }WIS_HEAD;47.48. typedef struct tagWIS_OBJECT_ENTRY49. {50. char Name[16];51. long Status;52. short Attribute; // 1-通道对象 2-表对象 3-流对象53. short SubAttribute; // 1-曲线对象 2-波形对象 3-地层测试对象 4-时深时对象54. DWORD Position; // 对象数据体从文件开始处的偏移量55. DWORD BlockNum;56. time_t TimeCreate;57. time_t TimeWrite;58. char Reserved[32];59. }WIS_OBJECT_ENTRY;60.61. typedef struct tagWIS_CHANNEL_DIMENSION62. {63. char Name[8];64. char Unit[8];65. char AliasName[16];66. float StartVal;67. float Delta;68. DWORD Samples;69. DWORD MaxSamples;70. DWORD Size;71. WORD RepCode;72. WORD Reserved;73. }WIS_CHANNEL_DIMENSION;74.75. typedef struct tagWIS_CHANNEL76. {77. char Unit[8];78. char AliasName[16];79. char AliasUnit[16];80. WORD RepCode;81. WORD CodeLen;82. float MinVal;83. float MaxVal;84. WORD Reserved;85. WORD NumOfDimension;86. WIS_CHANNEL_DIMENSION DimInfo[4];87. }WIS_CHANNEL;88.89. typedef struct tagWIS_STREAM90. {91. DWORD Length;92. DWORD Offset;93. }WIS_STREAM;94.95. typedef struct tagWIS_TABLE_FIELD96. {97. char Name[32];98. WORD RepCode;99. WORD Length;100. DWORD Reserved;101. } WIS_TABLE_FIELD;102.103. typedef struct tagWIS_TABLE104. {105. DWORD RecordCount;106. DWORD FieldCount;107. WIS_TABLE_FIELD *pField;108. }WIS_TABLE;109.110.111. typedef struct tagWIS_TABLE_DEFAULT_FILED 112. {113. char Name[16];114. char Alias[16];115. char Unit[8];116. char Type[8];117. WORD Length;118. WORD Count;119. char DefVal[64][12];120. } WIS_TABLE_DEFAULT_FIELD;121.122.123. typedef struct tagWIS_DEFAULT_TABLE124. {125. char Name[16];126. char Alias[16];127. char Attrb[8];128. DWORD FieldCount;129. WIS_TABLE_DEFAULT_FIELD *pField;130. } WIS_DEFAULT_TABLE;131.132.133.134. /* 曲线的信息结构体*/135. typedef struct tagCURVE_HEAD136. {137. char Name[16]; // 曲线的名字138. char Unit[8]; // 曲线的单位139. float startMD; // 曲线的起始深度140. float stopMD; // 曲线的结束深度141. int pointNum; // 数据样点数142. int position; // 数据位置143. struct tagCURVE_HEAD *next;144. } CURVE_HEAD;145.146. /* 曲线的数据结构体 */147. typedef struct tagCURVE_DATA148. {149. char Name[16]; // 曲线的名字150. char Unit[8]; // 曲线的单位151. float Depth[ROW]; // 曲线的深度值152. float Value[ROW]; // 曲线的值153. struct tagCURVE_DATA *next;154. } CURVE_DATA;155.156.157.158.159. /* ************************************************************* */160. /* Below block is the Main program of processing wis format file */ 161. /* ************************************************************* */162.163. int main(int argc, char *argv[])164. {165. FILE *wisfile; // 输入文件166. FILE *txtfile; // 输出文件167. char *in = argv[1];168. char *out = argv[2];169. // char *in = "demoa.wis";170. // char *out = "demoa.txt";171.172. if(argc != 3 )173. {174. printf("ERROR: Command parameters is not defined correctly!/n"); 175. exit(1);176. }177.178.179. wisfile = fopen(in, "rb");180. if(wis NULL)181. {182. printf("ERROR: Read ");183. exit(1);184. }185. txtfile = fopen(out, "w");186. if(txt NULL)187. {188. printf("ERROR: Write ");189. exit(1);190. }191.192. /* Process wis file, Read it and transfer it to text */193.194. /** wis文件标识符从文件偏移0开始,为10个字节的字符 */195. char wisid[10];196. fread(wisid, 10, 1, wisfile);197. // printf("文件标识符: %s/n", wisid);198. fprintf(txtfile, "ASCII WIS %c%c%c/n", wisid[4], wisid[5], wisid[6]); 199.200. /** 头文件紧接文件标识 */201. WIS_HEAD *wishead;202. wishead = (WIS_HEAD *)malloc(sizeof(WIS_HEAD));203. fseek(wisfile, 10, SEEK_SET);204. fread(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. /** curvePosition数组保存曲线数据开始的位置 WIS_OBJECT_ENTRY->Position的值 */212. /** curveName数组保存每条曲线的名称 */213. /** curveNum变量文件中保存曲线的数目 */214. int curvePosition[512];215. int curveName[512][16];216. int curveNum = 0; // curveNum is the identifer of the curves number 217. fseek(wisfile, wishead->EntryOffset, SEEK_SET);218. // fseek(wisfile, 10+sizeof(WIS_HEAD), 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. else if(objectEntry->Attribute == 1)230. {231. // printf("通道类型: %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. curvePosition[curveNum] = objectEntry->Position;237. int i=0;238. for(i=0; i<16; i++)239. {240. curveName[curveNum][i] = objectEntry->Name[i];241. }242.243. curveNum++;244. }245. else246. {247. continue;248. }249.250. }251. printf("/n%s文件的曲线数目: %d/n/n", in, curveNum);252.253.254.255. /* ****************************************************************** */ 256. /* Below block read every curve head information and put it in a link */ 257. /* ****************************************************************** */ 258.259. /** 创建链表 data_node 开始读取数据 */260. /** num变量每条曲线的行数 */261. CURVE_HEAD *first_head = NULL;262. float delta = 0.0;263.264. CURVE_HEAD *data_head = NULL;265. int num = 0;266. for(num = 0; num < curveNum ; num++) // num相当于第几条曲线267. {268.269. data_head = (CURVE_HEAD *)malloc(sizeof(CURVE_HEAD)); 270. data_head->position = curvePosition[num];271.272. fseek(wisfile, curvePosition[num], SEEK_SET);273. WIS_CHANNEL *channel;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("单位的别称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("维的开始值StartVal: %f/n", channel->DimInfo[0].StartVal); 283. // printf("维的增量值Delta: %f/n", channel->DimInfo[0].Delta);284.285. data_head->pointNum = channel->DimInfo[0].MaxSamples; // 深度采样点的个数286. data_head->startMD = channel->DimInfo[0].StartVal; // 起始深度287. delta = channel->DimInfo[0].Delta; // 间隔点值288. data_head->stopMD = channel->DimInfo[0].StartVal + delta * channel->DimInfo[0].MaxSamples; // 结束深度289.290.291. int i = 0;292. for(i=0; i<16; i++)293. {294. data_head->Name[i] = curveName[num][i];295. }296. for(i=0; i<8; i++)297. {298. data_head->Unit[i] = channel->Unit[i];299. }300.301. printf("No.%d/t", num+1); // 曲线编号302. printf("%s/t", data_head->Name); // 曲线名303. printf("%s/t", 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_head = data_head;313. }314.315.316.317. /* *********************************************************************** */ 318. /* Below block is for deciding the min and max Depth, and the max line n um */319. /* *********************************************************************** */ 320.321. // 从这里开始判断所有曲线中最小深度和最大深度值322. float minDepth = 0.0;323. float maxDepth = 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(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. // 利用最小最大深度值和间隔点值,确定输出的采样点数341. float depth[ROW];342. int lineNum = 0;343. lineNum = (maxDepth - minDepth) / delta;344. // printf("采样点个数:%d/n", lineNum);345.346. int row=0;347. for(row=0; row<lineNum; row++)348. {349. depth[row] = minDepth + delta * row;350. }351.352.353.354. /* ******************************************************** */355. /* Below block put every point value into a link as a curve */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; num < curveNum ; num++)366. {367. data_node = (CURVE_DATA *)malloc(sizeof(CURVE_DATA)); 368. int i = 0;369. for(i=0; i<16; i++)370. {371. data_node->Name[i] = data_head->Name[i];372. }373. for(i=0; i<8; i++)374. {375. data_node->Unit[i] = data_head->Unit[i];376. }377. // printf("曲线名称:%s/n", data_node->Name);378. // printf("曲线单位:%s/n", data_node->Unit);379.380. int startLine = 0;381. for(row=0; row<lineNum; row++)382. {383. if( abs(depth[row]-data_head->startMD)<= delta384. && depth[row] >= data_head->startMD )385. {386. startLine = 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)+464, SE EK_SET);394.395. // printf("测试样点数%d/n", data_head->pointNum);396. for(row=0; row<lineNum; row++)397. {398. float data[1];399. data[0] = -9999.000;400. if(row>=startLine && (row-startLine) < data_head->pointNum) 401. {402. fread(data, sizeof(float), 1, wisfile);403. data_node->Depth[row] = data_head->startMD + delta * (row-star tLine);404. data_node->Value[row] = data[0];405. }406. else407. {408. data_node->Depth[row] = minDepth + delta * row;409. data_node->Value[row] = -9999.000;410. }411.412. // printf("读取值:%f/n", data_node->Value[row]);413. }414.415.416. data_node->next = first_node;417. first_node = data_node;418. if(data_head->next == NULL)419. {420. break;421. }422.423. data_head = data_head->next;424. // printf("下一条曲线名:%s/n", data_head->Name);425. }426.427.428. /* **************************************************** */429. /* Below block print all point value for every curve */430. /* The important thing is how to decide the right depth */431. /* **************************************************** */432.433. // 从这里开始写入文本434.435. // Print Curve Name436. fprintf(txtfile, "DEPTH ");437. for(data_node=first_node; data_node!=NULL; data_node=data_node->n ext)438. {439. fprintf(txtfile, "%9s ", data_node->Name);440. }441. fprintf(txtfile, "/n");442. // printf("/n");443.444. // Print Curve Unit445. fprintf(txtfile, "M ");446. for(data_node=first_node; data_node!=NULL; data_node=data_node->n ext)447. {448. fprintf(txtfile, "%9s ", data_node->Unit);449. }450. fprintf(txtfile, "/n");451. // printf("/n");452.453. // Print curve value454. for(row=0; row<lineNum; row++)455. {456. if(depth[row] > maxDepth)457. {458. break;459. }460. fprintf(txtfile, "%-9.4f ", depth[row]);461. for(data_node=first_node; data_node!=NULL; data_node=data_node->next)462. {463. // fprintf(txtfile, "%-9.4f ", data_node->Depth[row]);464. fprintf(txtfile, "%9.3f ", data_node->Value[row]);465. }466. fprintf(txtfile, "/n");467. }468. // */469.470.471. // Process Over472. fclose(wisfile);473. fclose(txtfile);474. printf("/n%s Complete!/n", in);475. // system("PAUSE");476. // Program Over477. return 0;478. }右侧消息列表会显示每个Wis文件处理的信息!当然转换后的结果文件会存到所选取的路径中。