テキストデータの読む込み/書き込み
■Read_Asciiを使ったテキストデータの読み込み■
まあ、とりあえずIDLで上の図のようなデータの読み込み方法は以下の通り。
file=dialog_pickfile( ) ファイル読み込みのダイアログ呼び出し。読み込むデータをクリックするとfileにデータのアドレスが入る。
data=read_ascii(file) 余計なヘッダがついてなくスペース区切りの簡単なデータなので、IDLは自動で配列を認識してくれる。
するとデータは上図のように格納される。Name欄のDATAの横にある十字マークをクリックしてみる。
DATAの中にFIELD1という名のところに、FLOAT型の(7×7)のデータとして格納されていることがわかる。
このデータを画面に表示したいときはDATAのあとにピリオドを打ってFIELD1と書く必要がある。
Print, data.field1 構造体の下層データへのアクセスはピリオドを打って変数名をつなげていく。
■OpenRを使ったテキストデータの読み込み■
OpenRコマンドでの読み込みは、最初にデータを格納する配列を宣言しておく必要がある。
上図のようなデータをOpenRコマンドで読み込む場合は以下の通り。
file=dialog_pickfile( ) ファイル読み込みのダイアログ呼び出し。読み込むデータをクリックするとfileにデータのアドレスが入る。
data=fltarr(7,7) ファイルを格納する配列の用意。データは実数ふだからFLTARRを使う。
OpenR, lun, file, /get_lun ファイルにアクセスする準備
ReadF, lun, data データの読み込み。
Free_lun,lun ファイルアクセスの終了。
Read_Asciiは構造体がつくられてデータが格納されるが、OpenRコマンドでは任意の配列に読み込ませることができる。
■テキストデータの書き出し、及び、テキストデータでの書き出し■
画像データの値を、もしくは単なるテキストデータをそのままテキストデータの形で書き出したい場合はどちらもOpenWを使う。
file=Dialog_pickfile(/write ) file=Dialog_Pickfile( /write ) ファイル書きみ込みのダイアログ呼び出し。書き込む場所に移動し、ファイル名を拡張子まで書く。
Open, lun, file, /get_lun ファイルにアクセスする準備。
PrintF, lun,img
Free_lun,lun
注)テキストデータ書き出しは、配列が崩されたり、桁が切り捨てられたりする現象がおきる。
これを解決するにはPrintF, lun,imgのあとにさまざまなFormat文を書き加えなければならない。
■テキストデータの書き出しにおけるFormat文について■
IDLにおいて例えば,data(200,200)の配列に実数のデータが格納されていたとする。
このデータをテキストとして書き出したときも当然、200*200の配列の形を保ったまま出力したい。
そんなときはPrintF文のあとにFormat='(○○○○)'を追加する必要がある。
PrintF,lun,data,Format='(100F16.2)'
解説:
100: これは横に書き出す回数
F: 書き出すデータが実数であることを指定する(UINT型ならI)。
16: ひとつのデータに使う文字数の数(小数点だと点も含めた桁数)。
2: 小数点以下の桁数。
を指示している。たぶん・・・。
以上。