2005年11月2日 星期三

FORTRAN入門課程(3)字串處理

FORTRAN最詭異的功能,也最容易被「經常作數值運算的人」所忘記的功能就是字串處理功能,這種經常在其他語言中看到的功能,卻很少被寫FORTRAN的人重視。
因為,寫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

沒有留言:

張貼留言