FORTRAN 77 使用二進位檔的介紹
先備知識
- FORTRAN 基本語法(syntax)
- FORTRAN 編譯(compile)與執行(run)的方法
各種資料型態的資料長度
| 資料型態 | 位元長度 | 數值範圍 |
| INTEGER*4 | 4 bytes | -32768 ~ +32767 |
| INTEGER*8 | 8 bytes | -2147483648 ~ +2147483647 |
| REAL*4 | 4 bytes | 有效位數6~7位, +-3.4E+38 ~ +-1.18E-38 |
| REAL*8 | 8 bytes | 有效位數15~16位, +-1.79E+308 ~ +-2.23E-308 |
| CHARACTER*n | n bytes, n為使用者設定長度 | 任意字元 |
檔案輸出及輸入的基本概念(可以直接存取指定欄位,DIRECT)
- 輸出資料至二進位格式檔案
- 開啟檔案(OPEN), 設定代號(UNIT=id), 給定檔名(FILE=filename), 讀取模式(ACCESS="DIRECT"), 檔案儲存方法(FORM="UNFORMATTED"), 每一欄資料長度(RECL=length)
- 寫出(WRITE)資料至指定代號(UNIT=id)的指定欄位資料(REC=rec no)
- 關閉(CLOSE)檔案代號(UNIT=id)
- 從二進位格式檔案讀入資料
- 開啟檔案(OPEN), 設定代號(UNIT=id), 給定檔名(FILE=filename), 讀取模式(ACCESS="DIRECT"), 檔案儲存方法(FORM="UNFORMATTED"), 每一欄資料長度(RECL=length)
- 從指定代號(UNIT=id)的指定欄位資料(REC=rec no)讀入(READ)變數
- 關閉檔案代號 (CLOSE)
檔案輸出範例程式(可以直接存取指定欄位,DIRECT)
- 以下的程式會將greeting,intnum4,realnum4,realnum8的內容輸出至hello.bin檔案中
- 如果已經存在hello.bin時, 則程式會出現錯誤訊息。
open: 'new' file exists
apparent state: unit 10 named hello.bin
lately writing direct unformatted external IO
Aborted (core dumped)
program hello
character*12 greeting, filename
integer*4 intnum4, fileid
real*4 realnum4
real*8 realnum8
filename="hello.bin"
fileid=10
greeting="Hello World!"
intnum4=65535
realnum4=2.7182818
realnum8=3.141592653589793
open(unit=fileid, file=filename, form="unformatted",
+ access="direct", recl=16, status="new")
write(fileid, rec=1)greeting
write(fileid, rec=2)intnum4
write(fileid, rec=3)realnum4
write(fileid, rec=4)realnum8
close(fileid)
stop
end
檔案輸入範例程式(可以直接存取指定欄位,DIRECT)
- 以下的程式會將hello.bin檔案的內容讀入, greeting,intnum4,realnum4,realnum8 中
- 如果不存在hello.bin時, 則程式會出現錯誤訊息。
do_ud: end of file
apparent state: unit 10 named hello.bin
lately reading direct unformatted external IO
Aborted (core dumped)
program r_hello
character*12 greeting, filename
integer*4 intnum4, fileid
real*4 realnum4
real*8 realnum8
filename="hello.bin"
fileid=10
open(unit=fileid, file=filename, form="unformatted",
+ access="direct", recl=16, status="unknown")
read(fileid, rec=1)greeting
read(fileid, rec=2)intnum4
read(fileid, rec=3)realnum4
read(fileid, rec=4)realnum8
write(*,*)greeting
write(*,*)intnum4
write(*,*)realnum4
write(*,*)realnum8
close(fileid)
stop
end
檔案輸出範例程式(循序寫入,SEQUENTIAL)
program hello
character*12 greeting, filename
integer*4 intnum4, fileid
real*4 realnum4
real*8 realnum8
filename="hello.bin"
fileid=10
greeting="Hello World!"
intnum4=65535
realnum4=2.7182818
realnum8=3.141592653589793
open(unit=fileid, file=filename, form="unformatted",
+ access="sequential", status="new")
write(fileid)greeting
write(fileid)intnum4
write(fileid)realnum4
write(fileid)realnum8
close(fileid)
stop
end
檔案輸入範例程式(循序讀入,SEQUENTIAL)
program r_hello
character*12 greeting, filename
integer*4 intnum4, fileid
real*4 realnum4
real*8 realnum8
filename="hello.bin"
fileid=10
open(unit=fileid, file=filename, form="unformatted",
+ access="sequential", status="unknown")
read(fileid)greeting
read(fileid)intnum4
read(fileid)realnum4
read(fileid)realnum8
write(*,*)greeting
write(*,*)intnum4
write(*,*)realnum4
write(*,*)realnum8
close(fileid)
stop
end