外部データの読み込み:LoadWaves(中級)
外部データの読み込み:LoadWaves(中級)
第27回で、外部 ASCII ファイル(テキストファイル)の読み込み方について解説した。今回は、ファイルがコンピュータのどこに格納されているのか(ファイルパス)を考えながら、ファイルの読み込みを行ってみよう。ファイルパスを制御できるようになると、特定の形式のファイルを自動的に読み込む事も将来的には可能になるだろう。まずはこのリンクから今回の練習に使うファイルをダウンロードしておくこと。
zip形式ファイルの解凍後、dat041030.txtというファイルが得られただろうか。これを自分のパソコンの好きな場所において、IGOR Proを起動しよう。
まずは、前回と同様に、Data メニューから Load waves を選び、さらに Load General Text を呼び出そう。
読み込んだファイルには6つの wave が含まれており、IGOR はこれらの wave 名として、自動的に wave0, wave1, wave2, …, wave5 と割り当ててきたはずだ。
後でどの wave が何のデータかわからなくなるので、本来ならこの段階で固有の名前を割り当てておいた方がよいが、今回はそのまま Load ボタンを押してみよう。wave1 を wave0 に対してプロットしてサインカーブが得られたら成功だ。
メニューから「Load General Text」を実行するのではなく、マクロプログラムやコマンドラインからデータの読み込みを行う命令は、以前少しだけ紹介した、LoadWave/G だ。LoadWave は一般データだけでなく、特殊な文字(コロン、セミコロン、タブ、スペースなど)で区切られた文字データなど、実に様々なデータを読み込み事ができる。そのため、一般テキストデータである事を IGOR に伝えるために、/G オプションが必要だ。
この他にもLoadWaveには様々なオプションフラッグがある。すべてを紹介するのは控えるが、今回は /N フラッグを使ってみよう。これは(1)自動で wave0 から連番名を付けて、(2)既存 wave を上書きして読み込んでしまうオプションだ。連番のフラッグは/Aで、上書きのフラッグは、/Oだがら、/Nオプションはこれらの両方を含んだオプションと言える。上書きなど許可しない方が、データ消失の危険性が少なくなると思うかもしれないが、一つの wave名が重複してしまっただけで一々警告メッセージを出さると、自動処理プログラムとして機能しなくなってしまう。珍重にプログラムを組み、/O や /N オプションを使いこなそう。連番のオプションも、一見何も考えずに wave0, wave1, wave2, …と名前を付けてしまうように思えるが、必ずこの順番で名前が付くのだからプログラムを作る側としては操り安い。気に入らなければ後ほど好きな名前で複製をとって(Duplicate/O)、元のwave0を消せばよい(KillWaves/A/Z)。ただし、普段のちょっとした手動解析においては、読み込む wave の名前はわかりやすい名前にしておいた方がよい。時間がたってから見ると何のプロットかわからなくなるからだ。ここではあくまでも今後のプログラミングを想定しての話と理解していただきたい。
本題からやや脱線したが、パスについて解説しよう。IGOR Pro の LoadWave では、読み込んだファイルに関する履歴情報がある特定の文字列に格納されるようになっている。代表的なものは、S_filename, S_path, S_waveNamesの3つだ。それぞれ、テキストファイルの名称、ハードディスクのパス(ファイル部分を除く)、セミコロン区切りの割り当てられた wave 名に対応する。まずは、
print S_filename
print S_path
print S_waveNames
を実行してみよう。これらの文字列はすでに準備されている文字列なので、ユーザーが定義する必要はない。
もしファイルパスが既知ならば、Loadwave/G/N “パス名” によってメニューを経由せずに自動で読み込める。そこで、
Loadwave/G/N S_path+S_filename
を実行してみよう。wave の読み込みが行えたはずだ。だが、速すぎて読み込んだのかどうかわかりにくいだろう。そこでいったん読み込んだ wave0 から wave5 までを全部消去しよう。Data メニューの Killwaves を呼び出し、「Kill all waves not in use」にチェックを入れてから、「Do It」ボタンを押そう。コマンドでは KillWaves/A/Z だ。(うっかり消して困るデータもあると思うので、普段はこのオプションを慎重に利用する事。)
再度、Loadwave/G/N S_path+S_filename を実行してみよう。データが新たに読み込まれている事がわかるだろう(NewGraph, NewTable, KillWavesなどから確かめられる)。文字列に関する操作を別途修得すれば、S_filename を連番文字列に変更して、フォルダの中の大量のファイルを順番に読み込み、データ解析の自動化が実現するだろう。