2010-07-12 96 views
0

我已經讀取()了輸入文件的標題,並讀取了路徑上的值L。在Fortran中讀取包含(大)N個實數的行到一個數組中

現在我來的線L^2個連續實數,這是我需要輸入到分配數組A(L,L)的元素。

試圖

  character *100 :: buffer 
      read (1,10) buffer 
10  format(a(L*10)) 

結果

Error: Syntax error in FORMAT statement at (1) 
Error: FORMAT label 10 at (1) not defined 

,但我不知道怎麼回事應對雷亞爾的(巨大)可變數目。

嘗試:

do i=1,L 
    do j=i,L 
     read (1,"(f10.7)") buffer 
     read (buffer,*) A(i,j) 
    enddo 
    enddo 

拋出:

Fortran runtime error: Expected REAL for item 2 in formatted transfer, got CHARACTER 
    (f10.7) 

我不能簡單地讀取(1, 「(A1000)」)爲L將最終結束了巨大的,所以我真正需要的是一種逐一解析元素的方法。

請說有沒有辦法?

+1

我必須承認,我很難理解你的問題。你問「如何從一行讀取L個實數進入可分配數組?」 ? (如果L未知,則將它們讀入字符變量,然後使用內部讀取,對它們進行計數並將它們讀入數組中)。 – Rook 2010-07-12 01:10:50

回答

3

您已經閱讀它變成一個字符串,解析字符串處理的頭,也許是做「神奇」的事情後,爲什麼不直接從文件中讀取數字和跳躍的字符「緩衝器」?

「讀(單位,*)A」被稱爲「表式IO」 - 如果你想知道該怎麼尋找或查找 - 這似乎是一個好辦法給我。它非常靈活 - 您不必關心將您的數字精確對齊到列中。如果您只是讀入數組「A」,則將以Fortran數組元素順序讀取元素。

在2003 Fortran語言,你可以使用 「*」 作爲變量格式重複說明符:閱讀(單位, '(*(F10.7))')。但是,還沒有很多編譯器支持這一點。最簡單的方法就是使用一個巨大的值,比你需要的還要大 - 讀取將在列表中沒有更多項目被讀取時停止 - 重複說明符被允許超過項目數量讀。

+0

+1:比我更好 – eruciform 2010-07-12 03:42:55

0

這是你在找什麼?

http://www.tek-tips.com/viewthread.cfm?qid=1420862&page=1

更新:

http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/chap05/format.html http://rainbow.ldgo.columbia.edu/data/fortranreaddata.html

這越過格式化記錄長度的讀數。自從我不得不與Fortran I/O混淆已經很長時間了。我很確定有一個OPEN或READ標誌,它指定它不應該繼續到下一行,而是保持文件指針到位,以便下一個READ可以從那裏開始。但我不記得了手......

+0

並不是真的,我所有的價值觀都在同一行,所以逐行解析並不合理。 雖然,這當然比我有更好的,謝謝。 – Samizdis 2010-07-12 00:47:40

+0

更新了更多的信息,你仍然不是一個完整的答案。你有沒有試過讀入一個數組,並使用表示一個實數的格式? – eruciform 2010-07-12 01:13:35

+1

要繼續讀取同一行,可以在讀取語句中使用「advance ='no'」。我不認爲我會用這個來解決這個問題。 – 2010-07-12 02:06:13

0

哈哈,這似乎工作:

read (1,*) A
write (*,*) A

似乎標準都知道它在做什麼,即使我不。

+2

這是一個非常危險的方法。 – Rook 2010-07-12 01:23:17

+0

它爲什麼危險? – Samizdis 2010-07-12 01:31:06

+0

因爲你不知道你在做什麼。使用這種方法,你很可能會在你認爲自己在做某些事情的情況下結束工作,而該計劃實際上正在做一些完全不同的事情。這可能是危險的。 – Rook 2010-07-12 01:48:13

相關問題