(信号与信息处理专业论文)全波列测井信号纵横波波至识取——基于mfc的vc语言实现.pdf_第1页
(信号与信息处理专业论文)全波列测井信号纵横波波至识取——基于mfc的vc语言实现.pdf_第2页
(信号与信息处理专业论文)全波列测井信号纵横波波至识取——基于mfc的vc语言实现.pdf_第3页
(信号与信息处理专业论文)全波列测井信号纵横波波至识取——基于mfc的vc语言实现.pdf_第4页
(信号与信息处理专业论文)全波列测井信号纵横波波至识取——基于mfc的vc语言实现.pdf_第5页
已阅读5页,还剩52页未读 继续免费阅读

(信号与信息处理专业论文)全波列测井信号纵横波波至识取——基于mfc的vc语言实现.pdf.pdf 免费下载

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

文档简介

摘要 全波列测井信号纵横波波至识取 基于m f c 的v c + + 语言实现 作者简介:张威,男,1 9 8 2 年1 月出生。2 0 0 4 年师从于李瑞教授,2 0 0 7 年6 月 毕业于成都理工大学信号与信息处理专业并获信号与信息处理硕士学位。 摘要 本文通过对声波全波列测井信号的数据特征、声波测井数据处理、测井数据 解释、数据处理程序编程等资料及大量科研文献研究的基础上,进行了声波全波 列测井信号波至识取方法建模、波至识取程序编程、波至识取模型验证和成果展 示等方面的研究。文章提出了稳定因子、自适应坐标轴、波值比等概念,建立了 纵波、横波波至识取联合方程组。应用基于m f c 的v c + + 语言,按照面向对象 的编程思路,将波至识取模型转化为可执行程序。采用川罗6 5 2 井须二段声波全 波列测井数据,依据滑动时窗方法,利用程序识取纵横波波至曲线。运用原始声 波a c 曲线图和交会图方法验证方法模型,并结合一般测井数据处理工具得出综 合成果图。 关键词:波至识取,滑动时窗法,m f c ,c + + 成都理工大学硕士学位论文 w a v e - a r r i v i n g - p o i n td e t e c t i n go fp r i m a r yw a v ea n d s e c o n d a r yw a v el o g g i n gd a t a - p r o g r a i nr e a l i z a t i o nb yv i s u a lc + + b a s e do nm f c z h a n gw e i ,w a sb o mi nj a n 1 9 8 2 u n d e rt h eg u i d a n c eo fp r o f l ir u if r o ms e p 2 0 0 4 , h eh a sb e e na w a r d e dt h em a s t e rd e g r e eo fs i g n a la n di n f o r m a t i o np r o c e s s i n ga t c h e n g d uu n i v e r s i t yo f t e c h n o l o g yo nj u n e ,2 0 0 7 a b s t r a c t m o d e l i n g , p r o g r a m ,a n dm o d e l i n gv a l i d a t i o no fd e t e c t i n go fw a v e - a r r i v i n go f w e l l - l o g g i n ga r ec o m p r e h e n s i v e l yr e s e a r c h e db ya d o p t i n gm u c hi n f o r m a t i o no fd a t a c h a r a c t e ro fl o g g i n g , s i g n a lp r o c e s s i n g , d a t ae x p l a i n i n g , p r o g r a m m i n ga n da t h o r o u g h l yg r e a tl o to ft h es c i e n t i f i cs t u d i e s ,l a ba n a l y s i sl i t e r a t u r ee t c a c c o r d i n gt o a b u n d a n c eo f w e l l - l o g g i n g d a t a , t h i st e x td e s i g n sat y p eo fm e t h o df o r w a v e a r r i v i n g t i m ed e t e c t i n go fp r i m a r yw a v ea n ds e c o n d a r yw a v eo fs o u n dw a v e l o g g i n gs i g n a l , s l i p p a g ew i n d o w sm e t h o d , w h i c hc a r l i e so u tb yv i s u a lc + + l a n g u a g e b a s e do nm f c t h i sm e t h o d ,b yt i m e a n a l y z i n go fl o g g i n gd a t a , d e s i g n sc o m p u t i n g m e a n sf o rp r i m a r yw a v ea n ds e c o n d a r yw a v er e s p e c t i v e l y , w i t ha m p l i t u d ed i f f e r e n c e 0 fpa n dsw a v e st h e o r y , a n dc h a r a c t e r i s t i c so fs i g n a ln o i s e sa n ds t a t i o n a r y t h e w a v e - a r r i v i n g c u r v e sa r ep r o t r a c t e db yt h ep r o g r a m ,w h o s ed a t ar e s o u r c ec o m e sf r o m t h ed a t ao fw e l lo fx u 一2 n 4s e c t i o no fc h u a n - l u o6 5 2 a n dt h e ya r eb o t hc h e c k e du p b y t w oc u r r e n tm e t h o d s :a cc u r v ea n dd o tp l o t t i n g t h ei n t e g r a t i v ec h a r ti sp r o t r a c t e d a n dd i s p l a y e dw i t ht h et o o l so fs l i p p a g ew i n d o w sa n dc u r r e n to n e s k e y w o r d :w a v e - a r r i v i n g - t i m ed e t e c t i n g , s l i p p a g ew i n d o w sm e t h o d ,m f c ,v c + + 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得盛都垄王太堂或其他教 育机构的学位或证书而使用过的材料与我一同工作的同志对本研究所做的任何 贡献均已在论文中作了明确的说明并表示谢意。 幽 学位论文作者导师签名:苦约 学位论文作者签名: 掀磁 艺唧年口艿月】尹日 学位论文版权使用授权书 本学位论文作者完全了解盛赶堡王太堂有关保留、使用学位论文的规定, 有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和 借阅。本人授权盛整理王盍堂可以将学位论文的全部或部分内容编入有关数 据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名:敬墩 动嚷年0 5 只j 3b 第1 章导言 第1 章导言 1 1 选题依据与研究现状 通常的声速或声幅测井,只记录或利用滑行纵波首波的速度( 时差) 或幅度信 息,对携带有大量地层信息的续至波完全没有记录。为了更好地记录、利用续至 波的速度、幅度、频率、波形包络特征等信息,出现了长源距声波全波列测井, 使声波测井从地层中获取的信息及对信息的利用率大为增加。声波全波列测井信 息中包含有非常丰富的波场信息,其中主要有纵波、横波速度及其幅度、斯通利 波速度及其幅度和频谱。这些信息与地层的岩性、孔隙度、渗透率、流体饱和度 等地层信息有非常密切的关系。如何将这些信息从声波全波列测井资料中识取出 来,并用于解决地质问题,成为全波列测井资料处理和解释的主要任务。长源距 声波全波列测井是目前比较成熟且施工工艺相对简单易行的一种,其难点主要在 于资料的处理和解释。在实际工作中,识别纵波和测出它的速度是不困难的。然 而,横波在地层中传播较慢,到达时间较晚,其波至常常被纵波能量所掩盖,很 难识取。笔者介绍了一种滑动时窗法来识别纵、横波首波,识取纵、横波的相关 信息的方法。 随机过程的理论与方法。已广泛地应用于科学技术各领域,特别在信息技术 的发展过程,随机过程越来越显示其重要作用。但对于在工程领域内研究随机过 程,要准确分析其函数表达式,这本身来说是非常困难的也是不必要的。因此, 对随机过程函数表达式的分析就转化为对能反映随机过程本质的特征数字的研 究,当然我们知道特征数字是统计结果,要求得它们也很麻烦。所以,最后就用 时间平均代替统计平均,且在一定条件下时间平均基本上能够反映出随机过程的 本质。 1 2 主要研究内容及技术路线 o ,且为整数) ,区间与区间m 相连,连接点为4 ,m 与的 总长度为j ,令 5 成都理工大学硕士学位论文 = 陵4 l , l ,叫哺l = 酬, lj 町l 图2 2 纵波滑动时窗示意图 万一o ,1 , m 一0 ,1 ,m ( 2 1 ) ( 2 2 ) 尺:监。( 2 3 ) 恁。=勉似)(2-4) 由式( 2 - - 3 ) 可知,当m 区间为纵波正半周期( 或负半周期) 时,r 有最大 值尽。 这样,求纵波波至的问题转化为求尽。 现在来讨论各个参数m ,n ,4 ,& 和r 的意义 m 为纵波求值区间,称为m 窗。根据上文的论述,j i f 取值应小于纵波的半 周期,即ms 弓。 在此处为噪声求值区间,称为窗。但在讨论横波波至识取时,将表示 其他含义。为了讨论的方便,将值设为n 0 ,且为整数) ,区间与区间m 相连,连接点为4 ,m 与的 总长度为j ,令 = f = 卧l , l ,叫i 图2 3 横波滑动时窗示意图 厅- 0 ,1 “j 胁一o l ,”j m 7 ( 2 5 ) ( 2 6 ) 成都理工大学硕士学位论文 r :笠 s n 飓。= 脚似) 这样,求横波波至的问题也转化为求焉。 ( 2 7 ) ( 2 8 ) 现在来讨论各个参数m ,4 ,和r 的意义。 m 为横波求值区间,称为m 窗。根据上文的论述,m 取值应小于横波的半 周期,即m 钐。 在此处为横波求值区间,称为窗。为了讨论的方便,将值设为n = l 。 m 窗与窗共同构成滑动窗,简称窗。 4 为窗中心,当4 2 a ,时,4 为横波波至点。 晶为级波区间求值之和的绝对值。因为= 零,故晶一o a 但实际计算中, 值不为0 ,并且不允许为0 。我们将采取方法避免以上情况的发生,详细内容 在下文中论述。 & 为纵波区间各采样值之和的绝对值。当且仅当该求值区间为正半周期( 或 负半周期) 时,采样值之和有最大值。 r ,为比较系数。逐步移动滑动时窗,每移动一次,可求得一个r 值尼。当 比较系数r 取最大值,即吩2 思。时,4 点为横波至点,即4 = 彳j 。 2 3 稳定因子 如前文所述,纵波波至与横波波至识取中,一o 。通常情况下,由于采样 间隔、计算误差、系统噪声等多种原因,实际计算所得到的值并不为0 。现在 我们来讨论,晶值的可能情况及值对计算结果的影响。 8 第2 章滑动时窗法 2 3 1 纵波波至识取中的& 值 由式( 2 5 ) 、( 2 6 ) 及( 2 7 ) 可得 r :s g _ : s n ( 2 9 ) 设2 0 ,即,蚤4 。o 则式2 9 在数学上无意义。或从计算机数字表 示的方面解释,为比较系数e 为无穷大,在计算机内为该计算机所能表示的最 大值,记为q 。显然这都不是我们所想要的,否则如果在窗滑动的过程中,出现 多个为无穷大的r 值q ,则波至点无法判断。 设& 的取值晶,较小,使是的取值 碍q ,如果存在m s ,则我们 可知,。) q 。 由此可见,以上两种极端的情况表明:根据式( 2 9 ) 所计算出的玛值可能 会超出计算机所能表示的范围,或者的取值,较小,则& m 取值的变化将 对。取值产生极大地影响这都不利于对波至点作出较为精确的判断。因此, 我们希望引入一个数学符号,该符号既能很好地稳定比较系数吩的计算值,避 免计算结果超过q ,又不会影响咒。的取值。 2 3 2 添加稳定因子a 由式( 2 9 ) 添入符号a 露:l : s n - i - b ( 2 1 0 ) 现在讨论稳定因子a 的取值范围。 显然a 的值不宜取得太小,否则如果a 与为同一数量级,则不能取得稳定 9 成都理工大学硕士学位论文 r 取值的作用。同时,a 的值不宜取得太大如果6 一o ,或者说与a 比较 可以被忽略,则a 将大大降低r 取值的变化程度( 灵敏度) ,从而不能很好的判 断波至点。 根据相关经验,考虑到数据源类型、计算精度、实际误差等情况,我们通常 把a 值设定为1 - - 1 0 之间。当然这不是绝对的,需要根据具体情况进行调整。 2 4自适应坐标轴与纵波波至识取联合方程组 如图2 - - 4 a 和2 - - 4 b ,2 - - 4 c 图2 - - 4 a 表示一测井信号日j ,设相应计算结果 为s m f r o r j 。图2 - - 4 b 为一直流噪声掣,图2 - - 4 c 表示信号h j 与平混合后的信 号日卅计算+ ,与r m 有, 直流噪声可 o t 图2 - - 4 a 测井信号限图2 - - 4 b 直流噪声 渊 m v 图2 - - 4 c 测井信号日m s 聊 r j + l 。 1 0 第2 章滑动时窗法 为什么对于同一测井信号,噪声的不同会有不同的判断结果? 按照滑动时窗 法方法的设计思路,信号噪声应得到有效的压制,同时计算结果不会因为噪声的 改变而有较大的不同。显然现在的结果并不符合最初的设计思路。为了更好的弄 清楚问题的原因,我们来分析图2 - 5 。 2 4 1 自适应坐标轴方法 根据图2 - - 5 ,信号g ( d 为一简单正弦信号,即g ( 力= s l n ( x ) ,工【0 锄】;j ,l 为等距离变化的横坐标轴。其中墨的0 点与g 0 ) 的零点重合,也玛一次向y 轴 负方向移动1 个单位和两个单位,工墨一次向y 轴正方向移动1 个单位和两个 单位。分别根据不同的横坐以,在区间【o ,4 石】对雕) 求积分并取模,得结果 f g ( n ) 。其中f g ( 1 ) = o ,f g ( 2 ) = f g ( 4 ) = 轫,f g ( 3 ) = ,g ( 5 ) = 8 省。对f g ( 2 ) , 进行分析。彤( 2 ) 是横轴墨向】,轴负方向移动一个单位的结果,即新的横轴邑。 这等效于,以置为横轴,在区间【o 4 石 添加函数o ) = 1 ,并令函数g 协) = g o ) + s ( 力。对g ( 力求积分,可得f g g ) = v a ( 2 ) ;4 石 g ( x ) = s i n xx e 【0 ,4 靠l x a 孱: 飘潋么 4 耳 义 f g ( 2 ) 彩钐黝 x f g ( 3 ) 义 图2 5 示意图 这样,我们可以通过平移横坐标轴以的方法,达到在定义域内增添( 或减 去) ( x ) 的目的 1 1 成都理工大学硕士学位论文 2 4 2 纵波波至识取联合方程组 上文用一个纯数学的列子说明了用平移横坐标轴来去除直流信号( 阶跃信号) 的方法。回到本节开始,图4 4 提到的例子上,我们可以使用同样的方法,通过 水平移动横轴,到达去除直流噪声v 的目的。 令 & 一黔一4 ) | m o 1 ,“j 肘, ( p 一1 ) 露一陵卅i + n 0 , 1 , - - - , n c h , 爱鱼,( p 一3 5 k 一肥戗( 毫) ( p 一4 ) 该方程组称为纵波波至识取联合方程组,简称p 组。需要指出的是,式 露一i 毫一4 ,l + a 中,4 为滑动时窗中心,设4 所代表的点的坐标值为 瓴,乃) ,则4 4 表示每次计算时,横坐标轴沿l ,轴方向平移乃单位的距离。因 为每个最和毛拥有共同的窗中心4 ,故每个瓦和五都有相同的横坐标轴,因 而计算标准相同。这样,任一窗中心都4 都处于横坐标轴上,从而到达最大可能 的去除直流噪音的目的。 2 5 横波波至识取联合方程组 横波波至的识取方法与纵波波至识取方法基本相同,不同之处在于,纵波波 至是通过求纵波求值区间采样值之和的模与噪音求值区间采样值之和的模的比 值比较系数,来确定;而横波波至是通过求横波求值区间采样值之和的模与 纵波求值区间采样值之和的模的比值来判断,故具体计算方法上需要作一些调 整。 如图2 6 所示,滑动窗口处于纵波波尾与横波波至之间。从图中我们可以看 出,纵波尾波与横波首波在波幅值上有较大的区别,而纵波与纵波之间,横波与 横波之间波峰幅度差别较小。 第2 章滑动时窗法 、 b = 宅 n 九。j a 雠 t 0 一a :一 u 图2 - 6 测井信号示薏图 由此,我们考虑可以设立一个参数来衡量纵波尾波与横波首波的波峰幅度值 差别,简称幅值比。 设在区间内,纵横波波峰( 波谷) 值依次为b j ,有e i - n ,i ) ,令 磊- 勉饼4 ) ;同理在掰内,有( f ,“膨 ,令- 托僭i ) 。则有 b :盈 b n b 简称为幅值比,即使用某组数据进行横波至点计算时,该波至点所在滑动 时窗内,横波波峰与纵波波峰值的模的比率。通过对原始数据的分析发现,在该 组数据中,纵波尾波与横波首波的波峰幅度值差别在2 3 _ _ 3 8 之间,个别的达到 4 0 以上。 令 i “_i 无。陲一4 l ,m - 0 ,p j m 一1 ) 晶一陵一4 ) j + a ,n = 0 , 1 , - - , n ( s - - 2 ) 膏堕, ( s 一3 ) s 。 t 舰饼 ) , ( s 一4 b ;孚 ( s 一5 ) b n j 则称该方程组为横波波至识取联合方程组,简称s 组。 成都理工大学硕士学位论文 第3 章算法的v c + + 语言实现 c + + 语言是一种应用广泛的面向对象的程序设计语言,使用它可以实现面向 对象的程序设计。本章首先介绍一些有关面向对象程序设计的基本概念,再具体 说明波至识取算法是怎样实现的。 3 1 面向对象程序设计的基本思想和有关概念 面相对象的语言应该支持这三种要素。首先,应该包括对象的概念。对象是 状态和操作的封装体,状态是记忆操作结果的。满足这一点的语言被认为是基于 对象的语言。其次,应该支持类的概念和特征,类是以接口和实现来定义对象的 行为的样本,对象是由类来创建的。支持对象和类的语言被认为是基于类的语言。 最后,应该支持继承,已存在的类具有建立子类的能力,进而建立类的层次。支 持上述三个方面的语言称为面向对象的语言。 3 1 1 对象 从概念上讲,对象是代表着正在创建的系统中的一个实体。例如,一个商品 销售系统,像顾客、商品、柜台、厂家等都是对象,这些对象对于实现系统的完 整功能都是必要的。 从实现形式上来讲,对象是一个状态和操作( 或方法) 的封装体。状态是由 对象的数据结构的内容和值定义的,方法是一系列的实现步骤,它是由若干操作 构成的。 对象实现了信息隐藏,对象与外部是通过操作接口联系的,方法的具体实现 外部是不可见的。封装的目的就是阻止非法的访问,操作接口提供了这个对象的 功能。 对象是通过消息与另外一个消息传递信息的,每当一个操作被调用,就有一 条消息被发送到这个对象上,消息带来了将被执行的这个操作的详细内容。一般 地讲,消息传递的语法随系统的不同而不同,其组成部分包括:目标对象,所请 求的方法和参数。 3 1 2 类 类的完整性描述包含t # b 部接口和内部算法以及数据结构的形式。 由一个特定的类所创建的对象被称为这个类的实例,因此类是对象的抽象及 1 4 第3 章算法的v c + + 语言实现 描述,它是有共同行为的若干对象的同一描述体。类中要包含生成对象的具体方 法。 类是抽象数据类型的实现。一个类的所有对象都有相同的数据结构,并且共 享相同的实现操作的代码,而各个对象有着各自不同的状态,即私有的存储。因 此,类是所有对象的共同的行为和不同的状态的集合体 3 1 3 继承 类提供了说明一组对象结构的机制,再借助于继承这种重要的机制扩充了类 的定义,实现了面向对象计算的优越性。 继承提供了创建新类的一种方法。这种方法就是说,一个新类可以通过对已 有类进行修改或扩充满足创建新类的要求。新类共享已有类的行为,而自己还有 修改的或额外添加的行为。因此,可以说继承的本质特征是行为共享。 从一个类继承定义的新类,将继承了已有类的所有方法和属性,并且还可以 添加所需要的新的方法和属性。新类被称为已有类的子类,而已有类称为父类, 又叫基类,新类又叫派生类。 3 2m f c 概述 m f c ,微软基础类( m i c r o s o f tf o u n d a t i o nc l a s s e s ) ,实际上是微软提供的, 用于在c + + 环境下编写应用程序的一个框架和引擎,v c 是w i n o s 下开发人员 使用的专业c 斗4 - s d k ( s d k ,s t a n d a r ds o f t w a r ed e v e l o pk i t ,专业软件开发平台) , m f c 就是挂在它之上的一个辅助软件开发包,m f c 作为与v c 牟+ 血肉相连的部 分( 注意c + + 和v c + + 的区别:c + 是一种程序设计语言,是一种大家都承认的 软件编制的通用规范,而v c + + 只是一个编译器,或者说是一种编译器+ 源程序 编辑器的i d e ,w s ,p l a t f o r m ,这跟p a s c a l 和d e p h i 的关系一个道理,p a s c a l 是d e p h i 的语言基础,d e p h i 使用p a s c a l 规范来进行w 协下应用程序的开发和编 译,却不同于b a s i c 语言和v b 的关系,b a s i c 语言在v b 开发出来被应用的年代 已经成了b a s i c 语言的新规范,v b 新加的b a s i c 语言要素,如面对对象程序设计 的要素,是一种性质上的飞跃,使v b 既是一个i d e ,又成长成一个新的程序设 计语言) ,m f c 同b c + + 集成的v c l 一样是一个非外挂式的软件包,类库,只不 过m f c 类是微软为v c + + 专配的。 m f c 是w i na p i 与c + + 的结合,a p i ,即微软提供的w i n o s 下应用程序的 编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允 许用户使用各种各样的第三方( 如我是一方,微软是一方,b o r l a n d 就是第三方) 成都理工大学硕士学位论文 的编程语言来进行对w i no s 下应用程序的开发,使这些被开发出来的应用程序 能在w i n o s 下运行,比如v b ,v c h ,j a v a ,d e h p i 编程语言函数本质上全部源 于a p i ,因此用它们开发出来的应用程序都能工作在w i n o s 的消息机制和绘图 里,遵守w i n o s 作为一个操作系统的内部实现。m f c 是微软对a p i 函数的专用 c + + 封装,这种结合一方面让用户使用微软的专业c + + s d k 来进行w m 下应用 程序的开发变得容易,因为m f c 是对a p i 的封装,微软做了大量的工作,隐藏 了好多内节程序开发人员在w 如下用c + + m f c 编制软件时的大量内节,如应 用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付 出一定代价,因此就造成了m f c 对类封装中的一定程度的的冗余和迂回,但这 是可以接受的。 3 3 算法的代码实现 本节主要讲述了长短窗纵横波波至点识取算法的v c + + 程序设计思路和部 分核心代码。根据上节的介绍,m f c 是由各种不同的类结合起来构成了一个应 用程序的编程框架,它定义了应用程序的轮廓,并提供了用户接口的标准实现方 法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个 轮廓。因而,除了程序员自身所编写的代码外,该框架本身生成了大量通用代码 用以完成上文所述功能。为了更简洁的展示作者的编程思路,体系设计原理,本 节只提供程序的部分核心代码和必要的注释信息。 3 3 1 算法的设计思路 一 图3 1 算法的设计思路 1 6 第3 章算法的v c + + 语言实现 该程序的系统设计思路如图3 1 按照图上所示,系统由外围数据,用户 系统界面和内部处理模块三大部分组成。外围数据包括需要处理的原始数据、和 已经出好的结果,它们均以系统设定的格式( 文本格式) 存储于硬盘上;用户 系统界面是一对话框界面,它集成了系统设定的用户操作中所有可能的操作,其 中部分操作在初始状态下不能使用,需要用户对界面中的某些参数进行设定后才 可以使用( 第4 章中有详细说明) ;内部处理模块,包括数据转换( 读入读出) 模块、数据计算模块和数据显示模块等。系统各部分之间相对独立,通过系统消 息进行相互通信,因而具有较好的扩展性能,可以根据研究和应用的需要进行功 能扩展。 3 3 2 滑动时窗法波至计算v c + + 程序的核心源代码 m f c 源代码按照程序文件的种类,主要可以分为以“h ”作为后缀名的头文 件( 主要负责装载库函数和对类进行说明等) 和以“c p p ”作为后缀名的源文件 ( 实现类的功能) 本节主要按照文本数据流互转换、用户,系统界面、算法实现 的顺序,提供部分程序代码。 3 3 2 1 文件文本分析( f i l e t e x t a n a l y s i s c p p ) f i l e t e x t a n a l y s i s c p p :i m p l e m e n t a t i o no f t h ec f i l e t e x t a n a l y s i sc l a s s 。 # i n d u d e ”卧d a 奴h ” # i n c l u d e ”f i l e t e x t a n a l y s i s h ” 衔f d e f _ d e b u g # a n d e f t h i sf i l e s t a t i cc h a rt h i sf i l e 棚虬 # d e f i n en e wd e b u g _ n e w 执:n d i f c o n s t r u c t i o n d e s t r u c t i o n c f i l e t e x t a n a l y s i s :c f i l e t e x t a n a l y s i s 0 c f i l e t e x t a n a l y s i s :- - c f i l e t e x t a n a l y s i s 0 ) c f i l e t e x t a n a l y s i s :c f i l e t e x t a n a l y s i s ( c s t r i n gt m p f i l e n a m e ) m _ t e x t f i l e n a m e = t m p f i l e n a m e ; 1 7 成都理工大学硕士学位论文 c o l n u m = 0 ;文本文件中的数据列数 r o w n u m - - - 0 ;3 之本文件中的数据行数 , b o o l c f i l e t e x t a n a l y s i s :g e t c o l r o w n u m 0 分析文本文件行列数 i f ( m _ t e x t f i l e n a m e = - - ”) ) r e t u r nf a l s e ; i f ( t f i l e t x t o p e n ( m _ t e x t f i l e n a m e ,c f i l e :m o d e r e a d l c f i l e :t y p e b i n a r y ) ) a f x m e s s a g e b o x l l i ”打开文件“) + m _ t e x t f i l e n a m e 唧( 竹”错误! “) ) ; r e t u r nf a l s e ; t x t t i l e l e n g t h = f i l e t x t g e t l e n g t h 0 :数据文件长度 c h a rl i n e i n p u t 1 ; 以下分析数据文件中的数据列数:c o l n u m c h a r a l i n e s t r i n g2 n e we h a r t x t f i l e l e n g t h ; c h a r a l i n e s t r i n g t m p 。n e wc h a r t x t f i l e l e n g t h ; i n tj - - o ; f o r ( d w o r oi 1 = 0 ;i 1 t x t f i l e l e n 舀h ;i 1 + + 臌数据文件中第一行字符串 f i l e t x t r e a d ( 1 i n e i n p u t ,1 ) ;,从文件中读一个字符:每一行的第一个字符为 换行符,结束为回车符 i f ( 1 i n e i n p u t 0 = = r ) 回车 b r e a k ; e l s e i f ( 1 i n e i n p u t 0 ! = ) a l i n e s t r i n g t m p l j = l i n e i n p u t 0 ; j + + ; ) ) 1 8 第3 章算法的v c + + 语言实现 胛j 除字符串中首尾的空格符和t a b 符 i n th e a d s p a c e n u m = 0 ; i n tt a i l s p a c e n u m = 0 ; r o r ( i n t j 2 - - o ;j 2 - 1 ;j 3 训识别字符串中尾部的空格数 i f ( ( a l i n e s t r i n g t m p j 3 ! = ) ( a i j n e s t r i n g t m p d 3 】f - ” b r e a k ; ) e l s e t a i l s p a c e n u m + + ; ) 成都理工大学硕士学位论文 i n tr e a l n u m ; r e a l n u m = o ; f o r ( i n t j 4 = h e a d s p a c e n u m ;j 4 ( j o t a i l s p a c e n u m ) ;j 4 + + ) 去掉字符串中尾部的空格 a l i n e s t r i n g r e a l n u m = a l i n e s t r i n g t m p j 4 ; r e a l n u m + + ; a l i n e s t r i n g r e a l n u m = 、0 ; i f ( a l i n e s t r i n g 0 = = , k a l i n e s t r i n g r e a l n u m 一1 】= = ,缈字符串中第一个字符不 能为逗号 a f k m e 髂a g e b o x o r ( ”文件“) + m _ t e x t f i l e n a m e + - h ”分隔符位置错误( 数 据行首或尾有逗号) ! ”) ) ; r e t u r nf a l s e ; c o l n u m = 0 ;列数 b o o l o i d c h a r o r n o t = f a l s e ;i ? 一个识别是否为字符 f o r ( i n t j l - - - o ;j 1 r e a l n u m ;j 1 + + ) 识别一行中字符串个数 i f ( ( a l i n e s t r i n g j 1 i = ,)& ( a l i n e s t r i n g j 1 ! = ) & & ( a i j n e s t f i n g 1 】! = 是字符而非分隔符时 i f ( ! o l d c h a r o r n o t ) c o l n u m + + ;- 字符串中有逗号,判断为逗号分隔 o l d c h a r o r n o t = t r u e ; e l s e 是分隔符而非字符时 o l d c h a r o r n o t = f a l s e ; , 川 衔算数据文件中钓数据行数:r o w n u m 2 0 第3 章算法的¥c + + 语言实现 b o o l r e m m j u g , f e x , d l i n e j u g ;拍j 断连续两个字符是否为换行符+ 回车符 r o w n u m = 0 ; r e t u r n u g = f a l s e ;不连续,第一个字符不为回车符 f e e d l i n e j u g = f a l s e ; f i l e t x t s m b c g i n o ;,文件指针回到文件开始处 f o 巧d w o r di = o ;i t x t f i l e l e n g t h ;i + + ) f i l e t x t r e a d o i n e i n p u , 1 ) ;从文件中读一个字符每一行的第一个字符为 换行符,结束为回车符 i f ( 1 i n e i n p u t 0 = = x r ) 回车 r e m r n j u g = t r u e ;表示这次所读字符是回车符 e l s e r e t u m j u g = f a l s e ;表示这次所读字符不是回车符 i f ( 1 i n e n p u t 0 = = 、n ) f e e d l i n e j u g = t r u e ;是换行符 , e l s e f e e d l i n e j u g = f a l s e ;表示这次所读字符不是换行符 i f ( f e e d l i n e j u g r e t u m j u g ) b r e a k ;判断是否连续两个换行符+ 回车符, 是则停止读文件 i f ( r e t u r n j u g ) r o w n u m + + ;数据文件中最后一行有换行符,且下一行没有 数据时 i f ( ( i = = t x t f f l e l e n g t h - 1 ) & & ( 1 i n e i n p u t o ! = - r ) & & ( 1 i n e i n p u t o ! = 、n 9 ) r o w n u m + + ;数据文件中最后一行数据后面没有换行符时,行数加1 腕e 文本文件中,文件结束的最后一个字符为文件结束符而不是回车符 结束行列分析 力份析数据文件中是否漏数据 h l e t x t s e e k t o b e g i n o ;文件指针回到文件开始处 成都理工大学硕士学位论文 i n te u r r p o s ,k ;文件指针当前位置,每行数据的字符总数 f o r i n tk k - - 0 ;k k r o w n u m ;k k + + ) k - - 0 w 读下行数据时,下行字符从0 开始计算 c u r r p o s = f i l e t x t g e t p o s i t i o n 0 ; f o r ( d w o r dk l = c u r r p o s ;k l t x t f i l e l e n g t h ;k l + + ) 读数据文件中第一行字 符串 f i l e t x t r e a d ( 1 i n e i n p u t , 1 ) ;从文件中读一个字符每一行的第一个字 符为换行符,结束为回车符 i f ( 1 i n e i n p u t o = = 、r 3 回车 b r e a k ; e l s e i f ( 1 i n e i n p u t 0 ! = n 3 a l i n e s t r i n g t m p k = l i n e i n p u t 0 ; k + + : a l i n e s t r i n g t m p k - - 、0 ; 价只别每行数据的数据个数( 列数) i n tc o l u m e n u m n e x t - - 0 ;列数 o l d c h a r o r n o t = f a l s e ;_ :一个识别是否为字符 f o r ( i n tj k l = o ;j k l c o l n u m ) e r r m s g f o r m a t ( ”第d 行数据多d 个! ! ”,o 【l 【+ 1 ) ,( c o l u m e n u m n e x t c o l n u m ) ) ; i f ( c o l u m e n u m n e x t c o l n u m ) e r r m s g f o r m a t ( ”第d 行数据少d 个! ! ”,o d 【+ 1 ) ,( c o l n u m c o l u m e n u m n e x 0 ) ; a f x m e s s a g e b o x ( e r r m s g ) ; f i l e t x t c l o s e 0 ; r e t u r nf a l s e ; 腧循环结束处 d e l e t e 【 a l l n c s t r i n g ; d e l e t e 【 a l i n e s t r i n g t m p ; 结束文件分析 f i l e l r x t c l o s e o ; f e t u mt r u e ; 成都理工大学硕士学位论文 ) b o o l c f i l e t c x t a n a l y s i s :o p e n t x t f i l e o 打开数据文件 i f ( i f i l e t x t o p e n ( m _ t e x t f i l e n a m e , c f i l e :m o d e r e a d c f i l e :t y p e b i n a r y ) ) a f x m e s s a g e b o x o r ( ”打开文件) + mt e x t f i l e n a m e 十一t ( ”错误l ”) ) ; r e t u r nf a l s e ; t x t f i l e l e n g t h = f i l e t x t g e t l e n g t h o ;数据文件长度 r e u r nt r u e ; v o i dc f i l e t e x t a n a l y s i s :c l o s e t x t f i l e 0 关闭已打开的文件 f i l e t x t c l o s e 0 ; b o o lc f i l e t e x t a n a l y s i s :g e t a s t r i n 9 0 j 区回一个字符串,然后通过f o r m a t 将字符 串转换成c s t r i n g c h a rl i n e m v u t h ; d w o r dc u r r p o s ;文件指针当前位置 i n tl s t a r t r d 每行数据的字符总数 b o o l o l d c h a r o r n o t = f a l s e ;上一个识别是否为字符 s t a r t i d - - o ; k = o ;l l 读下行数据时下行字符从0 开始计算 c u r r p o s =

温馨提示

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

评论

0/150

提交评论