我有一个像这样的文件
1980 01 23
1982 04 30
1983 05 22
1984
1985 02 11
我尝试使用“(3I4)”格式读取数据
implicit none
integer, parameter :: FUnitIn = 10
character(len=255) :: FNameIn = "./test.txt"
integer :: FStatOpen, FStatRead
integer :: yyyy, mm, dd
open ( unit = FUnitIn, &
file = trim(FNameIn), &
access = "sequential", &
form = "formatted", &
status = "old", &
iostat = FStatOpen)
if (FStatOpen /= 0) then ! ERROR
stop
end if
do
read (FUnitIn, "(3I4)", iostat=FStatRead) yyyy, mm, dd
if (FStatRead /= 0) then
exit
else
write (6, "(3I4)") yyyy, mm, dd
end if
end do
空白行有三个零。 是否有处理空白输入的选项?
答案 0 :(得分:0)
如果您的唯一目标是跳过空行,则可以读取字符变量中的每一行,并检查其调整后的长度,例如以下代码(请参见变量record
)。要超越这种简单的实现方式,还需要您提供一些额外的信息,以了解您到底想要获得什么行为。
implicit none
integer, parameter :: FUnitIn = 10
character(len=255) :: FNameIn = "./test.txt"
integer :: FStatOpen, FStatRead
integer :: yyyy, mm, dd
character(len=1023) :: record
open ( unit = FUnitIn, &
file = trim(FNameIn), &
access = "sequential", &
form = "formatted", &
status = "old", &
iostat = FStatOpen)
if (FStatOpen /= 0) then ! ERROR
stop
end if
do
read (FUnitIn, "(3I4)", iostat=FStatRead) record
if (FStatRead /= 0) then
exit
elseif ( len_trim(adjustl(record)) > 0 ) then
read (record, *) yyyy, mm, dd
write (6, "(3I4)") yyyy, mm, dd
end if
end do