我是IDL的新手,我正在尝试编写一个代码,它将采用MODIS HDF文件(三级数据MOD14A1和MYD14A1具体),读取数组,然后从数组中写入数据到一个csv文件,但ASCII也可以工作。我有一些代码可以让我为一个文件执行此操作,但我希望能够为多个文件执行此操作。基本上,我希望它读取一个HDF阵列,将其写入csv,移动到下一个HDF文件,然后将该数组写入下一行中的同一csv文件。这里的任何帮助将不胜感激。到目前为止,我已用一个文件提供了我的代码。
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" array是我想要存储到csv中的那个。
提前感谢您的帮助!
答案 0 :(得分:0)
使用原始IO例程来编写以逗号分隔的数组,即:
,而不是使用WRITE_CSV
。
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