2016-11-15 73 views
0

我對IDL相當陌生,而且我正在嘗試編寫一個代碼,它將採用MODIS HDF文件(第三級數據MOD14A1和MYD14A1爲特定數據),讀取數組,然後將數組中的數據最好寫入一個csv文件,但ASCII也可以工作。我有允許我爲一個文件執行此操作的代碼,但我希望能夠爲多個文件執行此操作。基本上,我希望它讀取一個HDF數組,將其寫入一個csv,移至下一個HDF文件,然後將該數組寫入下一行中的同一個csv文件。任何幫助在這裏將不勝感激。我已經提供了我迄今爲止用一個文件來完成此操作的代碼。從IDL中的多個HDF文件讀取和寫入數組

filename = dialog_pickfile(filter = filter, path = path, title = title) 
csv_file = 'Data.csv' 

sd_id = HDF_SD_START(filename, /READ) 

; read "FirePix", "MaxT21" 

attr_index = HDF_SD_ATTRFIND(sd_id, 'FirePix') 
HDF_SD_ATTRINFO, sd_id, attr_index, DATA = FirePix 


attr_index = HDF_SD_ATTRFIND(sd_id, 'MaxT21') 
HDF_SD_ATTRINFO, sd_id, attr_index, DATA = MaxT21 


index = HDF_SD_NAMETOINDEX(sd_id, 'FireMask') 
sds_id = HDF_SD_SELECT(sd_id, index) 
HDF_SD_GETDATA, sds_id, FireMask 
HDF_SD_ENDACCESS, sds_id 

index = HDF_SD_NAMETOINDEX(sd_id, 'MaxFRP') 
sds_id = HDF_SD_SELECT(sd_id, index) 
HDF_SD_GETDATA, sds_id, MaxFRP 
HDF_SD_ENDACCESS, sds_id 


HDF_SD_END, sd_id 

help, FirePix 
print, FirePix, format = '(8I8)' 
print, MaxT21, format = '("MaxT21:", F6.1, " K")' 
help, FireMask, MaxFRP 


WRITE_CSV, csv_file, FirePix 

我跑在此之後,並選擇正確的文件,這是我得到的輸出:

FIREPIX   LONG  = Array[8] 
    0  4  0  0  3  12  3  0 
MaxT21: 402.1 K 
FIREMASK  BYTE  = Array[1200, 1200, 8] 
MAXFRP   LONG  = Array[1200, 1200, 8] 

的「FIREPIX」陣列是我想要存儲到CSV之一。

在此先感謝您的幫助!

回答

0

代替使用WRITE_CSV的,它是使用相當簡單的原語IO例程寫一個逗號分隔的陣列,即:

openw, lun, csv_file, /get_lun 

; the following line produces a single line the output CSV file 
printf, lun, strjoin(strtrim(firepix, 2), ', ') 

; TODO: do the above line as many times as necessary 

free_lun, sun