テキストデータの読む込み/書き込み

■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: 小数点以下の桁数。

を指示している。たぶん・・・。

 

 

以上。