(FORTRAN 90)I/O读取/打印

(FORTRAN 90)I/O读取/打印,fortran,Fortran,我有一个.dat文件,它有两列,列下列出了值。但是,条目之间存在随机间距。两列的长度相同(只是数据中的随机空行) 我需要能够阅读这些,然后显示它们 谢谢大家!!有什么建议/帮助吗 乔 我尝试过简单地使用justopen,但只是得到了一个I/O错误 PROGRAM TEST1 OPEN( 2, FILE='grades.dat', ACCESS='DIRECT', FORM='FORMATTED') READ( 2) X, Y END PROGRAM TEST1 这段代码逐行将文件读

我有一个.dat文件,它有两列,列下列出了值。但是,条目之间存在随机间距。两列的长度相同(只是数据中的随机空行)

我需要能够阅读这些,然后显示它们

谢谢大家!!有什么建议/帮助吗 乔

我尝试过简单地使用justopen,但只是得到了一个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

请给我看看你有什么done@BBdev谢谢你的回复。我尝试了10次不同的迭代,但基本上,它们在打开/打印或阅读时都与此类似。我只需要从文件中获取所有值。您的READ命令中没有指定格式。读(2,*)X,Y应该修复它。此外,阅读文件后关闭文件并关闭已解决的问题也是一种很好的方式。我只是试着运行这段代码,得到了:运行时错误F605:WRITE(CON)-一个字符所需的编辑描述符。我对fortran非常非常陌生。我还没有读过如何实现数组。但这段代码看起来非常接近。