因為,寫FORTRAN的人不會想到從一堆雜亂的資料中,挖出自己想要的內容, 可能情願自己打一個簡單清楚的資料檔, 例如,有一個ENVI軟體產生的header,其內容如下
ENVI description = { Create New File Result [Fri Jul 22 14:32:54 2005]} samples = 5760 lines = 9092 bands = 4 header offset = 0 file type = ENVI Standard data type = 2 interleave = bsq sensor type = Unknown byte order = 0 map info = {UTM, 1.000, 1.000, 231562.584, 2598337.772, 1.0000000000e+000, 1.0000000000e+000, 51, North, WGS-84, units=Meters} wavelength units = Unknown pixel size = {1.00000000e+000, 1.00000000e+000, units=Meters}
上面這個檔案是由ENVI自動產生,其中samples=5760表示影像矩陣的nx大小,
lines=9092表示影像矩陣的ny大小,我們該如何讀出這二個值呢?
program envi_header integer(kind=2),allocatable :: red(:,:),green(:,:),blue(:,:) character(len=80) :: aLine open(10,file='envi_image.hdr',status='old') ! 跳過3列資料 read(10,*) read(10,*) read(10,*) ! 將資料讀入 aLine 字串變數. read(10,'(a)')aLine ! 算出等號之後一位的位置 n=index(aLine,'=')+1 ! 從等號之後一位的位置到第80個字讀入nx read(aLine(n:80),*)nx read(10,'(a)')aLine n=index(aLine,'=')+1 read(aLine(n:80),*)ny close(10) write(*,*)'nx,ny=',nx,ny ! 動態配置矩陣. allocate(red(nx,ny),green(nx,ny),blue(nx,ny)) ...... stop end