データ解析のためのIgorPro活用術

複数のテキストデータファイルをwaveとして取り込む

このIgorPro (for Windows) のProcedureは複数のtext形式のデータファイルを 一度にIgorProにLoadするものです。 このマクロでは系統的な名前のファイルのみを読み込むだけではなく、 path で指定したdirectryの中にある全てのテキストファイルを 読み込むことができます。

Programの内容

使用方法

  1. このプログラムを使用する前に"wave0""wave1"という名前のwaveをrenameしてください。
  2. Load したいData fileをあるdirectry にまとめて入れてください。
  3. Data fileの拡張子は".txt"ですのでdos prompt 等で拡張子を変更する。
  4. 下のプログラムファイルをProcedure Windowに貼り付けてください。
  5. メニューバーに"Data/Load Waves"の下の方に"Loading"という項目が付け加わります。 これを選択すると以下のようなダイアログが表示されます。

  6. 上から2番目"Name of path containing data files"はNewPathとすると新しくdataという名前のpahtを作ってくれる。
  7. 上から3番目"Wave names of y"は何もいれなくて結構です。入力するとloadされたwaveの名前が (入力文字列)+(ファイル名)となります。
  8. 上から4番目"Wave names of x"はX軸(1列目)となるデータの名前です。

カスタマイズ、その他

  1. ここでKeyとなるコマンドはTextFile(pathName, index [, creatorStr ])です。これはpathで指定したdirectryの中の Textファイル(拡張子が.txt)を読みとるという作業を行います。
  2. IgorPro for Mac では .txt 以外の拡張子であってもTextファイルと認識して Loadを行います。
  3. データファイルのColumn が2でない場合は、新たに文字列(String)を定義し、 最後の方にあるrename コマンドを修正してください。 また同様のProcを新たに作成し、cho_pro の変数を新たに作成しProcを呼び出すと便利です。 (その場合、上から1番目(What you want to name waves?)に新たな選択項目が増えます)
  4. loadされるファイルの順番はデータ名の文字列のアルファベット順となります。なるべくファイルの番号付けは 1,2,...9,10ではなく、01,02,..09,10 .とすることを勧めます。
ここから2列のデータ列の場合でのProcedureです。
※なお、1列のアスキー形式のデータ列については こちらに掲載しておきます。

/////////////////////////////////////////////////
// This procedure is for systematical loading
// all files in one directry with two column data.
// This provedure is for IgorPro 4 for Windows.
//    created by M. Nagai on April, 1996,
//    modified on Jan. 13, 2003 
/////////////////////////////////////////////////

Menu "Load Waves" "-" "Loading" End ///////////////////////////////////////////////// Proc Loading(cho_pro,thePath,wy_name,wx_name) String cho_pro ="_FileName_" String thePath ="_New Path_" String wy_name ="" String wx_name ="wave_x" Prompt cho_pro, "What you want to name waves?", popup "_FileName_" Prompt thePath, "Name of path containing data files", popup PathList("*", ";", "")+"_New Path_" Prompt wy_name, "Wave names of y" Prompt wx_name, "Wave names of x" Silent 1 // Now Data Loading... if (CmpStr(thePath, "_New Path_") == 0) NewPath/O data thePath = "data" endif if (exists("wave0")+exists("wave1")==0) if (CmpStr(cho_pro, "_FileName_") == 0) Load_fout(thePath,wx_name,wy_name) endif else Abort("Please rename wave0 or wave1.") endif end ///////////////////////////////////////////////// Function Load_fout(thePath,wx_name,wy_name) String thePath String wx_name String wy_name String fileName,wawawa Variable fileIndex=0, gotFile do fileName = TextFile($thePath, fileIndex) gotFile = CmpStr(fileName, "") if (gotFile) LoadWave/G/P=$thePath/O/N=wave fileName wawawa=wy_name+fileName if (strsearch(wawawa,".",0)>-1) wawawa= wawawa[0,strsearch(wawawa,".",0)-1] endif //change the below command //if data column in the data file is not two. rename wave1 $wawawa if (fileindex==0) rename wave0 $wx_name else KillWaves wave0 endif endif fileIndex += 1 while (gotFile) end

ここまで
最終更新日: 2004.4.10
一つ上の項目に戻る