Fortran 如何从文件中读取大量数据并将其存储在变量中?

Fortran 如何从文件中读取大量数据并将其存储在变量中?,fortran,fortran90,Fortran,Fortran90,我有一个文件,每个元素都有压力值。我需要元素编号(ELNO)和压力(PLOAD),并通过一个子例程。我无法将它们与文件分开阅读。 从S175开始读取数据,如下所示 我希望能够阅读这个文件,比如说A0001.txt,并逐行阅读。在读这些行时,我想把第一个点后面的数字,例如1007、1008等,存储到一个变量ELNO中,把变量PLOAD中最后一个逗号后面的数字存储到循环中。这是因为我需要ELNO的每个值,并用IF循环检查一个条件 我的问题是读取文件并存储在像ELNO(i)这样的变量中。名称S175是

我有一个文件,每个元素都有压力值。我需要元素编号(ELNO)和压力(PLOAD),并通过一个子例程。我无法将它们与文件分开阅读。 从S175开始读取数据,如下所示

我希望能够阅读这个文件,比如说A0001.txt,并逐行阅读。在读这些行时,我想把第一个点后面的数字,例如1007、1008等,存储到一个变量ELNO中,把变量PLOAD中最后一个逗号后面的数字存储到循环中。这是因为我需要ELNO的每个值,并用IF循环检查一个条件

我的问题是读取文件并存储在像ELNO(i)这样的变量中。名称S175是常量

我想我理解逻辑。我必须将每个like存储为一个字符串,并从字符串中的第6个位置开始迭代,直到找到第一个“,”并将其存储在ELNO(I)中。但我对FORTRAN还不太熟悉,所以无法获得它。在过去的一周里,我一直在努力学习FORTRAN语言来实现这一点。但是,我们无法解决这个问题

我尝试了下面这样的代码,但它并没有逐行阅读,因为我想我并没有把它放在循环下

     S175.1007,P,0.221948
     S175.1008,P,0.221943
     S175.1009,P,0.221929
     S175.1010,P,0.222287
     S175.1018,P,0.222438
     S175.1019,P,0.222425
     .....
     .....
     .....
     .....
     .....
     S175.13000,P,-1990
     S175.13001,P,-1980
     S175.13002,P,-2009

  PROGRAM BARGE 
     implicit none    
     CHARACTER X*80
     OPEN(UNIT=60, FILE="A0001.txt", ACCESS='SEQUENTIAL', ACTION='READ')
     READ(UNIT=60, FMT='(A)', END=10)X
  10 OPEN(UNIT=61, FILE="2.txt", ACTION="write")
     WRITE (UNIT=61,FMT='(A)')X 


  END PROGRAM BARGE

谢谢大家。我自己已经完成了。可能有一种更简单、更快的方法,但效果很好。如果有更有效的方法,请告诉我。我可以学习。:)


使用Fortran的列表定向输入可以很容易地从一行中读取数据项,例如
S175.1019,p,0.222425
。以下代码段可以替换OP自己答案中的
do
循环:

DO
  READ(UNIT=60, FMT='(A)', IOSTAT=SUCCESS) PRES
  IF (SUCCESS.NE.0) EXIT
  READ(PRES(6:),*) ELNO, P, PLOAD
  WRITE(*,*) ELNO, PLOAD
END DO
要使其起作用,您必须包括以下声明:

CHARACTER(LEN=1) :: P
捕捉输入文件每行中的字母
p
。重要的是这一条

READ(PRES(6:),*) ELNO, P, PLOAD
它使用编辑描述符
*
,告诉编译器/运行时如何从
PRES
行中的第6个和后面的字符中读取三个变量(一个整数、一个字符、一个实数)的值


幸运的是,有了一个漂亮干净的输入文件(如图所示),编译器读取值不会有问题,所有对
的扫描都是不必要的。如果在另一个应用程序中,您需要搜索一行中出现的字符,请使用内在函数
index

阅读了吗?谢谢。我没有看到这个。我尝试过谷歌搜索,但没有找到这个例子。同时我也做了这件事。也许有更好的方法。我是个新手,所以这可能不是最好的方法。非常感谢。我对FORTRAN很陌生。你的回答帮助我学会了一种更好的方法。:)
READ(PRES(6:),*) ELNO, P, PLOAD