用文件fw读写链表_用FORTRAN95写的sgy文件读写程序
前一阵子,遇到修改地震数据道头的问题,很多软件没有这个功能,遂自己动手,查阅了大量文献资料。无奈我自己只会fortran,就写写吧,反正数值处理和计算并不需要很多界面。。。
下面是子程序
!C+-----------------------------------------------------------------------+
!C| Module : SGY文件读写模块(简版) |
!C| Last modified :10-22-2019 |
!C| Written by : LAUQRU |
!C| 主要功能: 1、支持IBM格式、IEEE格式、无卷头PC格式 |
!C| 2、自动判断文件格式 |
!C| 3、自动读取采样长度、采样率及道数 |
!C+-----------------------------------------------------------------------+
|
!C+-----------------------------------------------------------------------+
module SGYmodule
implicit none
contains
!C+-----------------------------------------------------------------------+
!C| Subroutine : GetFileLength |
!C| Last modified : 10-22-2019 |
!C| Written by : LAUQRU |
!C| 主要功能: 1、获得文件大小 |
!C+-----------------------------------------------------------------------+
Subroutine GetFileLength( FileName,Length )
! USE DFPORT
implicit none
character(len=128)::FileName
Integer(kind=4)::Length
INTEGER*4 ierr, statb(13)
ierr = STAT ( FileName, statb )
if ( ierr .ne. 0 ) stop 'stat: error'
Length = statb(8)
End Subroutine
!C+-----------------------------------------------------------------------+
!C| Subroutine : PREREAD |
!C| Last modified : 10-22-2017 |
!C| Written by : LAUQRU |
!C| 主要功能: 1、预读SGY文件,获取相关参数 |
!C+-----------------------------------------------------------------------+
!C| SgyFormat:0--IBM,1--IEEE,2--无卷头PC |
!C+-----------------------------------------------------------------------+
Subroutine PREREAD( FileName,SgyFormat,NTR,NT,DT )
implicit none
character(len=128)::FileName
integer:: ios,mark_pos=1
character(len=128):: iom='OK'
Integer(kind=4)::Length,NTR,NT,DT,tmp
integer(kind=1)::SgyFormat
integer(kind=2),dimension(1800):: REEL !3600字节
integer(kind=2),dimension(120):: HEAD !240字节
CALL GetFileLength(FileName, Length)
! WRITE(*,*)Length
!==============================================================================
! 打开SEG-Y文件
!==============================================================================
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='BIG_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
read(70)REEL
dt = reel(1609)
nt = reel(1611)
tmp = Mod(Length - 3600, nt * 4 +240)
read(70)HEAD
if(tmp .eq.0 .and. HEAD(58) .eq. nt .and. head(59) .eq.dt) then
SgyFormat = 0
NTR = (Length - 3600) / (nt * 4 +240)
! write(*,*)"IBM Format"
else
close(70)
mark_pos=1
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='Little_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
REWIND(UNIT=70)
read(70)REEL
dt = reel(1609)
nt = reel(1611)
tmp = Mod(Length - 3600, nt * 4 +240)
read(70)HEAD
if(tmp .eq.0 .and. HEAD(58) .eq. nt .and. head(59) .eq.dt) then
SgyFormat = 1
NTR = (Length - 3600) / (nt * 4 +240)
! write(*,*)"IEE 带卷头Format"
else
REWIND(UNIT=70)
read(70)HEAD
dt = head(59)
nt = HEAD(58)
tmp = Mod(Length, nt * 4 +240)
if(tmp .eq.0 ) then
NTR = Length/ (nt * 4 +240)
SgyFormat = 2
! write(*,*)"IEEE 无卷头Format"
end if
end if
end if
close(70)
End Subroutine
!C+-----------------------------------------------------------------------+
!C| Subroutine : READSgy |
!C| Last modified : 10-22-2019 |
!C| Written by : LAUQRU |
!C| 主要功能: 1、读取SGY文件 |
!C+-----------------------------------------------------------------------+
!C| SgyFormat:0--IBM,1--IEEE,2--无卷头PC |
!C+-----------------------------------------------------------------------+
Subroutine READSgy( FileName,SgyFormat,NTR,NT,Date,REEL,SgyHead )
implicit none
character(len=128)::FileName
Integer(kind=4)::NTR,NT,i
integer(kind=1)::SgyFormat
integer:: ios
character(len=128):: iom='OK'
integer(kind=2),dimension(1800):: REEL !3600字节
! integer(kind=2),dimension(120):: HEAD !240字节
real(kind=4)::Date(NTR,NT)
Integer(kind=2)::SgyHead(NTR,120)
if(SgyFormat .EQ. 0) then !IBM格式文件的读取
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='BIG_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
read(70)REEL
Do i=1,Ntr
Read(70)SgyHead(i,:),Date(i,:)
End DO
Close(70)
else if(SgyFormat .EQ. 1) then !IEEE文件的读取
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='Little_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
read(70)REEL
Do i=1,Ntr
Read(70)SgyHead(i,:),Date(i,:)
End DO
Close(70)
else if(SgyFormat .EQ. 2) then !无卷头PC格式的读取
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='Little_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
Do i=1,Ntr
Read(70)SgyHead(i,:),Date(i,:)
End DO
Close(70)
end if
End Subroutine
!C+-----------------------------------------------------------------------+
!C| Subroutine : WriteSgy |
!C| Last modified : 10-22-2019 |
!C| Written by : LAUQRU |
!C| 主要功能: 1、写SGY文件 |
!C+-----------------------------------------------------------------------+
!C| SgyFormat:0--IBM,1--IEEE,2--无卷头PC |
!C+-----------------------------------------------------------------------+
Subroutine WriteSgy( FileName,SgyFormat,NTR,NT,Date,REEL,SgyHead )
implicit none
character(len=128)::FileName
Integer(kind=4)::NTR,NT,i
integer(kind=1)::SgyFormat
integer:: ios
character(len=128):: iom='OK'
integer(kind=2),dimension(1800):: REEL !3600字节
! integer(kind=2),dimension(120):: HEAD !240字节
real(kind=4)::Date(NTR,NT)
Integer(kind=2)::SgyHead(NTR,120)
if(SgyFormat .EQ. 0) then !IBM格式文件的读取
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='BIG_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
write(70)REEL
Do i=1,Ntr
Write(70)SgyHead(i,:),Date(i,:)
End DO
Close(70)
else if(SgyFormat .EQ. 1) then !IEEE文件的读取
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='Little_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
write(70)REEL
Do i=1,Ntr
Write(70)SgyHead(i,:),Date(i,:)
End DO
Close(70)
else if(SgyFormat .EQ. 2) then !无卷头PC格式的读取
open(70,file=FileName, &
access='stream', & !<< 流访问,即按字节访问文件
form='unformatted', &
CONVERT='Little_ENDIAN', & !<< IEEE Big Endian ^^ Little_ENDIAN
iostat=ios, &
iomsg=iom)
Do i=1,Ntr
Write(70)SgyHead(i,:),Date(i,:)
End DO
Close(70)
end if
End Subroutine
end module
用文件fw读写链表_用FORTRAN95写的sgy文件读写程序相关推荐
- python对文件操作的相关函数_第六章、Python文件操作
第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持fil ...
- java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...
用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊? 答案:1 信息版本:手机版 电脑版 解决时间 2020-07-02 16:34 已解决 20 ...
- java中文件处理之图片_在Java 7中处理文件
java中文件处理之图片 以下是The Well-Grounded Java Developer的草稿的修改后的片段. 它使您快速了解与以前版本相比,在Java 7中操作文件要容易得多. 通过使用新的 ...
- oracle 控制文件在哪里设置_更改Oracle默认的控制文件设置
环境:Windows XP SP2 32位 Oracle 9.2.0.1 32位 创建数据库后,Oracle默认的3个控制文件都在c:/oracle/oradata/SID/下,3个鸡蛋都在一个篮子里 ...
- python修改文件内容最后一行_关于python:如何修改文件的最后一行?
我文件的最后一行是: 29-dez,40, 号 如何修改该行,使其显示: 29-Dez,40,90,100,50 号 注意:我不想写新行.我想在29-Dez,40,后面加一行新值. 我是Python的 ...
- python关于文件的编程题_《Python编程》源代码文件
压缩包 : bbc59749e0028c3f1ab3a1c9a762a6d.rar 列表 <Python编程>源代码文件/.gitignore <Python编程>源代码文件/ ...
- 复制assert目录文件到私有目录_每天学点之CentOS文件/目录的权限
Linux中,最基本的两个命令:"cd"与"ls"."cd"是可以切换目录,如:cd /dev,就是进入到"根"目录下的 ...
- win10 桌面的的文件都不见了 提示不注销保存都文件都为临时_无网也能传文件?!Win10 自带的“就近共享”功能这么腻害你知道吗?...
给同事朋友发送文件,或在不同的电脑上互相传输文件都是很常见的需求.我们曾推荐过「 Feem」.「Send Anywhere」.「奶牛快传」.扫扫传.AirDroid 等都是文件传送工具利器. 但这类工 ...
- csv文件导入后台乱码_用Excel打开CSV格式文件乱码,三种方法可以处理好!
日常办公中,我们使用办公软件办公是比较平凡的,现在的办公软件也有好几种(微软的office.金山的WPS等).而且小编觉得在所有的办公软件中是微软的office是比较有名的.这款软件不仅功能齐全,还可 ...
最新文章
- 不经历风雨,怎么能见彩虹!马克斯与我的不解之缘!
- Happy Number
- 【NLP】文本分类还停留在BERT?对偶对比学习框架也太强了
- nyoj 586 疯牛(二分+贪心)
- 如果编程语言是女孩,你最喜欢哪一个?
- C语言的本质(37)——makefile之隐含规则和模式规则
- Unity中Debug打印信息的颜色设置
- stm32头文件学习之Core_cm3.c(h)
- Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
- android代码实现删除,Android中RecyclerView实现Item添加和删除的代码示例
- linux d开头是什么文件夹,linux文件权限,p开头/d开头/l开头
- ffmpeg源码简析(十)libswscale中的SwsContext,sws_scale()
- html塔防游戏,HTML5 版塔防游戏
- scrcpy CreateProcessW() error 5
- java软件开发工程师证书考试费用,太完整了!
- linux 替换文件中的字符串
- 钣金系统三维设计与工艺展开功能的实现
- TP6------邮箱验证码发送邮件
- Android 12 (S) 新加系统服务
- Fibonacci(斐波那契)数列