我有一个 .dat 文件,它有 2 列,列下列出了值。但是,条目之间存在随机间距。两列的长度相同(只是数据中的随机空行)。
我需要能够阅读这些然后显示它们。
谢谢你!对于任何建议/帮助乔
我试过只使用 OPEN 但只是得到一个 I/O 错误。
PROGRAM TEST1
OPEN( 2, FILE='grades.dat', ACCESS='DIRECT', FORM='FORMATTED')
READ( 2) X, Y
END PROGRAM TEST1
我有一个 .dat 文件,它有 2 列,列下列出了值。但是,条目之间存在随机间距。两列的长度相同(只是数据中的随机空行)。
我需要能够阅读这些然后显示它们。
谢谢你!对于任何建议/帮助乔
我试过只使用 OPEN 但只是得到一个 I/O 错误。
PROGRAM TEST1
OPEN( 2, FILE='grades.dat', ACCESS='DIRECT', FORM='FORMATTED')
READ( 2) X, Y
END PROGRAM TEST1
此代码逐行将文件读入字符串。如果字符串是非空白的,对应于包含两个数字的行而不是空白,它将它们读入下一个数组元素。假定数组已被声明为足够大。这回答了你的问题了吗?更好的设计是读取文件以确定数字的数量,倒回文件,并将数组分配到正确的大小,然后将文件读入数组。
编辑:实际上,Fortran 会自动跳过空白行,因此解决方案可以更简单:
program read_file
use, intrinsic :: iso_fortran_env
implicit none
integer :: i, j, ReadCode
real, dimension (100) :: x, y
open (unit=2, file="grades.dat", access="sequential", form="formatted", status="old", action="read" )
i = 1
ReadLoop: do
read (2, *, iostat=ReadCode ) x (i), y (i)
if ( ReadCode /= 0 ) then
if ( ReadCode == iostat_end ) then
exit ReadLoop
else
write ( *, '( / "Bad read: ", I0 )' ) ReadCode
stop
end if
end if
i = i + 1
end do ReadLoop
do j=1,i-1
write (*, *) x(j), y(j)
end do
end program read_file