2013-01-15 26 views
2

該程序非常愚蠢,但它只是測試如何從Fortran中讀取文件。我寫了下面的例子:Fortran - 使用格式從相同文件中讀寫

program manipolazione 
implicit none 
integer, parameter :: codice = 10 
integer, parameter :: massimo = 20 
integer :: numero, quadrato 
integer :: error, errore_lettura 
integer :: indice 

010 format (1x, 'Il quadrato di ', I0, 1x, 'e'' ', I0) 
020 format(1x, A) ! scrive generico messaggio 
030 format(1x, A, 1x, I0) ! scrive errori con loro codice 
open (unit = codice, File = "test.txt", iostat = error, status = 'replace', action = 'write') 
controllo_apertura : if (error == 0) then 
    write(*, 020) "Comincio a scrivere sul file...\n" 
    contatore : do indice = 1, massimo, 1 
     numero = indice 
     quadrato = numero ** 2 
     write(codice, 010) numero, quadrato 
    end do contatore 
else controllo_apertura 
    write(*,020) "Non siamo riusciti ad aprire il file..." 
end if controllo_apertura 
close(codice) 

open (unit = codice, File = "test.txt", iostat = error, status = 'old', action = 'read') 
controllo_apertura1 : if (error == 0) then 
    write(*,020)"Comincia la lettura dei valori!\n" 
    counter : do indice = 1, massimo, 1 
     read(codice, 010, iostat=errore_lettura) numero, quadrato ! THAT'S THE PROBLEM 
     errorelettura : if (errore_lettura > 0) then 
      write(*,030) "Abbiamo avuto un problema serio, ho letto male, error:",errore_lettura 
     else errorelettura 
      write(*, 010) numero, quadrato 
     end if errorelettura 
    end do counter 
else controllo_apertura1 
    write(*,020) "Non siamo riusciti ad aprire il file..." 
end if controllo_apertura1 
read(*,*) 
end program manipolazione 

我想閱讀我剛纔寫的東西,然後打印回來。簡而言之,用格式寫入,然後讀取這些值。通過閱讀代碼你肯定會明白。我真的不知道29.

+0

+1。 – zmbq

+0

謝謝!!! :)你有什麼想法來解決這個格式問題? – AleN

+0

我幾乎不記得我的FORTRAN,所以不,我不能幫你解決實際問題。 – zmbq

回答

1

你似乎使用此格式的語句

010 format (1x, 'Il quadrato di ', I0, 1x, 'e'' ', I0) 

這個寫聲明

read(codice, 010, iostat=errore_lettura) numero, quadrato ! THAT'S THE PROBLEM 

您的問題,試圖使用產生什麼在做線一個包含字符串編輯描述符的格式聲明。最新的標準指出這些不適用於輸入;我希望早些時候的標準也排除了它們。它們在寫作時非常有意義,但很難看到您希望如何在閱讀說明中解釋它們。我想嘗試

011 format (2I0) 
... 
read(codice, 011, iostat=errore_lettura) numero, quadrato 

,看看問一個FORTRAN問題會發生什麼

+0

謝謝你的回答!我知道他們沒有任何意義,我只想指出,我希望跳過那些角色來檢索數字。與您的代碼相同的錯誤:gfortran中的錯誤5006,這應該是錯誤的格式。我非常感謝你的幫助。你有任何其他提示來幫助我嗎? – AleN

+0

@AleN:那麼你需要一種跳過字符串並只讀取數字的格式。這會很麻煩,因爲你把它們寫成'I0',這是最小寬度,這意味着它們在線上的位置會隨着它們的大小而變化。 – sigma