Fortran `错误:打开文件进行读取时,OPEN语句`中出现语法错误
我是一个编程初学者,我只想从一个有两列和大约130行的文件中读取数据。我试着写下这段代码,但它不起作用。有人能帮忙吗 出现以下错误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
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单元后,你从未读过它。非常感谢你如此全面的回答,你正确地发现了我的问题,你的帮助很到位