簡體   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