文件中常常包含日期时间等信息。初学者处理这类文件时,常遇到如何读取日期和时间这个难题,因为fortran并不提供日期、时间的类型。本文介绍了一些读取时间日期的思路,推荐新手阅读。
某些文件中常常包含日期和时间等有用信息,比如记录某天的降雨量,某一个地震的发震时刻等。初学者处理这类文件时,常会遇到如何读取日期和时间这个难题,因为fortran并不提供日期、时间类型。常见的日期时间表示方式有以下几种:
1、2015-01-01 08:30:02
2、2015-1-1 08:30:02
3、2015.01.12 08:30:02
4、2015.1.12 08:30:02
5、2015/10/02 08:30:02
6、2015/10/2 08:30:02
即:年、月、日之间可用横杠、点号或斜杠分隔,其中年占4位,月日各占2位(1,3,5)或占1-2位(2,4,6)。一般来说,在同一个文件中,分隔符是相同的,即不会出现同时使用横杠和斜杠的情形,这里只讨论以横杠分隔的情形。
当年、月、日、时、分、秒所占位数固定时(1,3,5),由于数据规整,可直接使用相应输入格式来读取。下面给出例子1:
输入文件:
日期 时间 震级
2015-01-01 08:30:02 2.0
2015-04-12 13:33:45 2.4
2015-10-09 10:05:23 4.3
2015-12-31 06:11:14 2.1
program test
implicit none
integer(4) YY, MM, DD, h, m, s, i
real d
character(80) cLine
open(11,file='1.txt',action='read')
read(11,*)
!(i4,1x,i2,1x,i2,1x,i2,1x,i2,1x,i2,4x,f3.1)
read(11,'(i4,5(1x,i2),4x,f3.1)',iostat=i) YY, MM, DD, h, m, s, d
if(i/=0) exit
write(*,'(6i5,2x,f3.1)') YY, MM, DD, h, m, s, d
end do
end program test
当月、日所占位数不固定时,上面的代码就不适用了,此时需要先将每一行内容读取到字符串,通过处理字符窜来获得有用信息。我们先看例子2:
日期 时间 震级
2015-1-1 08:30:02 2.0
2015/4/12 13:33:45 2.4
2015-10-9 10:05:23 4.3
2015-12-31 06:11:14 2.1
program test
implicit none
integer(4) YY, MM, DD, h, m, s, i, j
real d
character(80) cLine
open(11,file='1.txt',action='read')
read(11,*)
read(11,'(a)',iostat=i) cLine
if(i/=0) exit
do j = 1, len_trim(cLine)
if(index('/-:',cLine(j:j))>0) cLine(j:j)=' '
end do
read(cLine,*) YY, MM, DD, h, m, s, d
write(*,'(6i5,2x,f3.1)') YY, MM, DD, h, m, s, d
end do
end program test
例2的编程思想是:
1、将整行信息读入字符串
2、将字符串中的横杠、斜杠和冒号替换为空格
3、使用内部文件读写,从字符窜读取信息。
总结:这里给出了两个读取日期和时间的例子,推荐使用例2的思想,因为例1仅针对数据规整的情况,而例2可处理不规整的数据,更具通用性。
例2中没有给出分隔符为点号的情形,是因为数据中同时存在小数点,也会被替换。这种情形稍微复杂,我们给出编程思路,读者可自行实现。
1、将整行信息读入字符串
2、使用内部文件读写,从字符窜读取震级数据
3、将字符串中的横杠、斜杠、点号和冒号替换为空格
4、使用内部文件读写,从字符窜读取日期和时间。
·
高斯勒让德求积分Fortran程序
(10)
·
《Intel Visual Fortran应用程序开...
(10)
·
FAQ之 Intel Fortran + VS 基本操作
(10)
·
任意表达式求值模块
(9)
·
Intel Fortran编译器
(9)
·
差分进化算法
(8)
·
新语法系列 之 定义变量和数组的那点事
(8)
·
教你看懂 Intel Fortran 的运行时错误
(8)
·
《使用OpenMP 进行 Fortran95并行计算》
(8)
·
《Fortran95 程序设计》【彭国伦】
(8)
·
快速傅里叶变换FFT
(8)
·
Fortran 95/2003科学计算与工程
(8)
·
FAQ之 Intel Fortran + VS 安装配置
(7)
·
FAQ之 文件行列与二维数组行列
(7)
·
VS2010下配置MPI开发环境
(7)