【IDL】遠取文字中三維陣列的方法

地理遥感生态网平台發表於2024-06-28

利用IDL可以自動獲取文字中一維、二維甚至三維的陣列。當陣列為二維以上時,需要透過方法獲取陣列的行列數等資訊。下面以三維陣列為例,介紹如何使用IDL自動獲取文字中儲存的三維陣列。

對於三維陣列的儲存方式有一定的要求,如圖所示(習慣遙感影像了,就把第三維看成是波段吧,o(∩_∩)o ~)。本次測試未考慮資料型別,大家可參考程式碼進行修改。

【IDL】遠取文字中三維陣列的方法

圖:測試所用三維陣列及格式說明

程式碼如下:

  • Samples – 列數
  • Lines – 行數
  • Bands – 波段數
PRO TEST_READ_3D_TXT
  ;檔案路徑,自行修改
  file = 'D:\Temp\3維陣列.txt'
 
  ;獲取samples。因為有空行,所以不能用FILE_LINES函式。
 OPENR, lun, file, /get_lun
 WHILE ~EOF(lun) DO BEGIN
   str = ''
   READF, lun, str
   IF STRTRIM(str) NE '' THEN BEGIN
     samples = N_ELEMENTS(STRSPLIT(str))
     BREAK
   ENDIF
 ENDWHILE
 FREE_LUN, lun
 
  ;獲取lines和bands, lines是總行數,除以bands得到每一維的行數。
  bands = 1L
  lines = 0L
  blank = 0
 
 OPENR, lun, file, /get_lun
 WHILE ~EOF(lun) DO BEGIN
   str = ''
   READF, lun, str
   IF STRTRIM(str) EQ '' AND blank EQ 1 THEN BEGIN
     bands++
     blank++
   ENDIF ELSE IF STRTRIM(str) NE '' THEN BEGIN
     blank = 1
     lines++
   ENDIF ELSE IF STRTRIM(str) EQ '' AND blank GT 1 THEN BEGIN
     blank++
   ENDIF
 ENDWHILE
 FREE_LUN, lun
 
 IF blank GE 2 THEN bands--
 
 PRINT, 'samples: ', samples
 PRINT, 'lines:  ', lines/bands
 PRINT, 'bands:  ', bands
 
;獲取三維陣列Data
  Data = INTARR(samples, lines/bands, bands)
 OPENR, lun, file, /get_lun
 READF, lun, Data
 FREE_LUN, lun
 
 PRINT, Data
 
END

IDL Prints:

相關文章