Fortran `错误:打开文件进行读取时,OPEN语句`中出现语法错误

Fortran `错误:打开文件进行读取时,OPEN语句`中出现语法错误,fortran,gfortran,Fortran,Gfortran,我是一个编程初学者,我只想从一个有两列和大约130行的文件中读取数据。我试着写下这段代码,但它不起作用。有人能帮忙吗 出现以下错误 rogram readfromfile implicit none integer :: N, i integer, dimension(130,2) :: cs OPEN (UNIT=20,FILE='readtry.txt',STATUS='OLD',FORM='UNFORMATTED',) do i=1,130 rea

我是一个编程初学者,我只想从一个有两列和大约130行的文件中读取数据。我试着写下这段代码,但它不起作用。有人能帮忙吗

出现以下错误

rogram readfromfile
  implicit none
    integer :: N, i
    integer, dimension(130,2) :: cs

  OPEN (UNIT=20,FILE='readtry.txt',STATUS='OLD',FORM='UNFORMATTED',)
    do i=1,130
    read (*,*) cs(i,1), cs(i,2)
    enddo


    do i=1,130
        print *, cs(i,1), cs(i,2)
    enddo

您有一个编译时错误,而不是读取问题。但要点如下:

它抱怨语法错误。你的陈述是这样的:

gfortran -Wall -c "Rwarray.f95" (in directory: D:\Fortrandir\2Darrays)
Rwarray.f95:7:67:
   OPEN (UNIT=20,FILE='readtry.txt',STATUS='OLD',FORM='UNFORMATTED',)
                                                                   1
Error: Syntax error in OPEN statement at (1)
Compilation failed.
open(xxx, xxx, xxx, xxx,)
为了编译它,您需要删除最后一个逗号。但我不认为这会给你想要的

打开文件时,您将其声明为未格式化。无格式基本上意味着它包含某种形式的二进制值。更重要的是,未格式化不能保证在计算机之间工作。所以,除非这个文件是用Fortran程序在您的系统上用
FORM=“UNFORMATTED”
参数编写的,否则我认为您不会得到想要的

我怀疑您的输入文件如下所示:

gfortran -Wall -c "Rwarray.f95" (in directory: D:\Fortrandir\2Darrays)
Rwarray.f95:7:67:
   OPEN (UNIT=20,FILE='readtry.txt',STATUS='OLD',FORM='UNFORMATTED',)
                                                                   1
Error: Syntax error in OPEN statement at (1)
Compilation failed.
open(xxx, xxx, xxx, xxx,)
这将是格式化的,而不是未格式化的

然后使用
read(*,*)
。但是其中的第一个
*
是指“标准输入”,如果您想从文件中读取,您需要使用
读取(20,*)
,因为20是打开输入文件的单位

对于
write
语句,
*
是正确的,假设您要写入“标准输出”--即屏幕

我进一步建议使用错误处理例程。将以下两个变量添加到声明块:

1   3
2   10
31  4711
然后在打开、读取或写入时使用它们:

integer :: ios
character(len=100) :: iomsg
当然,您必须包括
检查
子例程:

open(unit=xx, file=xxx, status=xxx, action=xxx, form=xxx, io_stat=ios, iomsg=iomsg)
call check(ios, iomsg, "OPEN")

read(20, *, io_stat=ios, iomsg=iomsg) cs(1, i), cs(2, i)
call check(ios, iomsg, "READ")
程序读取文件
隐式无
包含
子程序检查(ios、iomsg、操作)
整数,意图(in)::ios
字符(len=*),意图(in)::iomsg
字符(len=*)、意图(in)、可选::操作
如果(ios==0)返回!没有发生错误,返回
打印*,“发现错误。错误代码:”,ios
打印*,“消息:”,修剪(iomsg)
如果(当前(行动))打印*,“行动是:”,修剪(行动)
第一站
结束子程序检查
结束程序readfromfile

我对Fortran一无所知,但我猜那一行末尾的尾随逗号
OPEN(UNIT=20,FILE='readtry.txt',STATUS='OLD',FORM='UNFORMATTED',)不应该在那里。如果需要,可以删除它或添加任何缺少的参数。除此之外,未格式化表示二进制。只是一个猜测,但你可能不想这样。还要注意的是,在打开第20单元后,你从未读过它。非常感谢你如此全面的回答,你正确地发现了我的问题,你的帮助很到位