簡體   English   中英

如何從帶有Fortran 77描述和空行的文件中讀取數據?

[英]How do I read data from a file with description and blank lines with Fortran 77?

我是Fortran 77的新手。我需要將給定文本文件中的數據讀入兩個數組,但是有些行是空白的,或者在包含我需要讀取的數據的行之前包含有關數據集的描述性信息。 我如何跳過這些線?

另外,我的代碼是否可以計算包含我在該文件中感興趣的數據的行數? 或者我是否必須手動計算它們以構建我的do循環來讀取數據?

我試圖在網上和Schaum的Fortran 77編程中找到例子,但是找不到任何太具體的例子。

我需要從下面的數據中讀取數據的一部分。 我需要構建一個包含每列下的條目的數組。

    Data from fig. 3 in Klapdor et al., MPLA_17(2002)2409

    E(keV)  counts_in_bin

    2031.5  5.4

    2032.5  0

    2033.5  0

我假設這個問題非常基本,但我現在已經和它斗爭了一段時間,所以我想我會問。

自從我查看F77代碼已經很長時間了,但一般來說,如果你在DO循環中的read語句可以處理查找空行,甚至是只包含空格的記錄,那么你可以編寫邏輯來捕獲這個條件並休息或繼續聲明。 我只是不記得讀取是否可以智能地處理這種情況。

或者,如果您使用的是UNIX shell和coreutils,則可以使用sed刪除空行/ ^ $ /或/ ^ * $ /以在將文件發送到F77之前對其進行預處理

就像是

$ sed infile -e'd / ^ $ /; d / ^ * $ /'> outfile

如果您知道不需要/想要讀取的行的位置,則可以通過調用read而不使用輸入項來推進IO。

您可以使用:

read(input-unit,*)

從輸入文件中讀取一行,丟棄其內容並將IO推進到下一行。

看起來應該是這樣的: -

C       Initialise
    integer i
    character*80 t1,t2,t3
    real*8 x,y
    open(unit=1,file='qdata.txt')   
C       Read headers    
    read(1,100)t1
100 format(A80)
    write(6,*) t1
    read(1,100)t2
    write(6,*) t2
    read(1,100)t3
    write(6,*) t3
    write(6,*)

C       Read data
    do 10 i=1,10
    read(1,*,end=99) x,y
    write(6,*) x,y
10  continue
99  continue
    end

所以我使用了經典的格式化讀取來讀取標題行,然后使用自由格式來讀取數字。 帶有星號的自由格式讀取會跳過包含空白行的空白行,以便它可以執行您想要的操作,當沒有更多數據時,它將轉到語句99並完成。

輸出如下: -

     Data from fig. 3 in Klapdor et al., MPLA_17(2002)2409                       

     E(keV)  counts_in_bin 

   2031.5000000000000        5.4000000000000004     
   2032.5000000000000        0.0000000000000000     
   2033.5000000000000        0.0000000000000000  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM