繁体   English   中英

如何从fortran中的文件中读取数据

[英]How to read data from a file in fortran

我有一个.dat文件,其中包含许多行中的一系列数据,如下所示。 我想从每一行(第二和第三个数字)中读取两个数字并将其分配给变量,例如第二个到x(1,i)和第三个到x(2,i)。 i的值从1变为9000,对应于每个9000行。

  1   0.2077742E-01   0.1315710E-01   0.2218703E-04  -0.7526844E-05
  2   0.2064923E-01   0.1370921E-01   0.5160497E-05  -0.6106872E-04
  3   0.2069335E-01   0.1446493E-01  -0.1517477E-04  -0.2678836E-04
  4   0.2136012E-01   0.1310226E-01   0.8096579E-04  -0.2091828E-04
  5   0.2129221E-01   0.1380866E-01   0.9713367E-05  -0.2111076E-04
  6   0.2130786E-01   0.1449554E-01  -0.1372658E-05  -0.1607569E-05
  7   0.2195375E-01   0.1304382E-01   0.1206853E-03  -0.2769564E-04
  8   0.2171398E-01   0.1372358E-01  -0.1436741E-04  -0.2231794E-04
  9   0.2193212E-01   0.1446982E-01  -0.5678712E-05  -0.1880452E-04
 10   0.2255034E-01   0.1298457E-01   0.2226397E-03  -0.4775016E-04
 11   0.2234811E-01   0.1370892E-01   0.1539219E-04  -0.2676827E-04
 12   0.2250139E-01   0.1449063E-01   0.6857453E-05  -0.1959816E-04
 13   0.2311584E-01   0.1292939E-01   0.3245234E-03  -0.2145422E-04
 14   0.2265567E-01   0.1367124E-01  -0.5482677E-04  -0.6929516E-04
 15   0.2308732E-01   0.1441105E-01  -0.4883980E-04  -0.5488964E-04
 16   0.2369612E-01   0.1286988E-01   0.3164438E-03   0.5181705E-05
 17   0.2333626E-01   0.1358709E-01   0.2992323E-04  -0.3658970E-04
 18   0.2351967E-01   0.1444346E-01   0.2000859E-04   0.5844122E-05
 19   0.2425562E-01   0.1280576E-01   0.1712960E-03   0.3221714E-04
 20   0.2358314E-01   0.1359597E-01  -0.5286794E-04   0.5639317E-04
 21   0.2406372E-01   0.1434354E-01  -0.3155423E-04   0.2389453E-04
 22   0.2440915E-01   0.1444667E-01   0.9195025E-04   0.2545742E-04
 23   0.2484257E-01   0.1274295E-01   0.6371955E-04   0.1572621E-04
 24   0.2444211E-01   0.1359181E-01  -0.1755666E-03   0.1667949E-03
 25   0.2431473E-01   0.1346151E-01   0.1424003E-03  -0.1036167E-03
 26   0.2498710E-01   0.1434537E-01   0.3143868E-04  -0.4613371E-05
 27   0.2542195E-01   0.1267686E-01  -0.1103745E-04  -0.3899099E-05
 28   0.2527807E-01   0.1340544E-01  -0.1526311E-03  -0.1358241E-04
 29   0.2519788E-01   0.1350556E-01   0.1004352E-03   0.6685333E-04
 30   0.2528750E-01   0.1443648E-01   0.1048803E-03   0.2594530E-04
 31   0.2605581E-01   0.1262580E-01   0.3114293E-04   0.5790992E-05
 32   0.2602784E-01   0.1324524E-01  -0.6518681E-05  -0.1118536E-03
 33   0.2583167E-01   0.1405316E-01  -0.9194989E-05   0.5246043E-04
 34   0.2599337E-01   0.1449096E-01   0.1606246E-03   0.2065522E-04
 35   0.2665012E-01   0.1256468E-01   0.4131713E-04   0.8817949E-05
 36   0.2623754E-01   0.1339113E-01  -0.1785680E-03   0.1278207E-03

我写了一个如下所示的代码,但它没有按照我的预期行事。

我不知道这段代码的每个部分的含义,例如STATUS ='OLD',读命令中的含义*。 我只是按照一些教程并尝试编写类似的代码。 如果可能的话,请解释它们,或者向我推荐一本好的,简单的,全面的书或教程。

implicit none
integer:: i,a
real(8):: x(2,9000)

open (2, file="f_xv0950.dat",STATUS='OLD')
    do i=1,9000
        read (2,*) a, x(1,i), x(2,i)
   enddo
close(2)

我期望的结果应该是这样的,

x(1,1) = 0.2077742E-01    x(2,1) = 0.1315710E-01
x(1,2) = 0.2064923E-01    x(2,2) = 0.1370921E-01
x(1,3) = 0.2069335E-01    x(2,3) = 0.1446493E-01

等等....

非常感谢您的帮助。 谢谢。

!!!!!!!!!!!! Edit_1 !!!!!!!!!!! 添加以下行以使用以下代码将输出写入文件,

open (3,file="tempout.dat") 
    do i=1,9000
         write (2,100) x(1,i), x(2,i) 
    enddo 
100   format(2(2x, e14.7)) 
close (3) 

但是我收到了一个错误

forrtl: severe (24): end-of-file during read, unit 2, file C:\Users\mkha0038\Desktop\XDSPH_RMC_T\f_xv0950.dat

你能帮忙吗?

你写的内容几乎可以奏效。 除了缺少的结束之外,您需要显式声明变量x,以便将其标注为数组。 以下示例适用于包含36行的截断示例文件:

program readin

  real, dimension(2,36) :: x
  integer :: i

  open (2, file="f_xv0950.dat",STATUS='OLD')
  do i=1,36
     read (2,*) a, x(1,i), x(2,i)
  end do
  close(2)

  do i=1,3
     write(6,'(a,i1,a,e13.7,a,i1,a,e13.7)') "x(1,",i,") = ",x(1,i), &
          " x(2,",i,") = ",x(2,i)
  end do

end program readin

它给出了输出

x(1,1) = 0.2077742E-01 x(2,1) = 0.1315710E-01
x(1,2) = 0.2064923E-01 x(2,2) = 0.1370921E-01
x(1,3) = 0.2069335E-01 x(2,3) = 0.1446493E-01

如你所愿

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM