データ解析のためのIgorPro活用術
複数のテキストデータファイルをwaveとして取り込む
このIgorPro (for Windows) のProcedureは複数のtext形式のデータファイルを
一度にIgorProにLoadするものです。
このマクロでは系統的な名前のファイルのみを読み込むだけではなく、
path で指定したdirectryの中にある全てのテキストファイルを
読み込むことができます。
Programの内容
マクロをコンパイルすると、メニューバーの「Load」にLoadingという名の項目が新たに作られます。
これを実行すると"Data"というpathを自動的に作り、
このpathで指定したdirectryの中にある全てのTextファイルを順番にLoadしていきます。
このプログラムでは2列(x,y) のアスキー形式のデータを想定してあります。
これらのデータはまずwave0, wave1 という名前のwaveとして取り込まれますので、
それそれのwave1をファイルの名前にrenameします。
通常系統的に取得したデータの場合はxのデータは共通であることが多いので
wave0は最初のみを"wave_x"(デフォルト)にrenameし、
次のファイルからはkillwaves wave0 にします。
※なお、1列のアスキー形式のデータ列については
こちらに掲載しておきます。
使用方法
- このプログラムを使用する前に"wave0""wave1"という名前のwaveをrenameしてください。
- Load したいData fileをあるdirectry にまとめて入れてください。
- Data fileの拡張子は".txt"ですのでdos prompt 等で拡張子を変更する。
- 下のプログラムファイルをProcedure Windowに貼り付けてください。
- メニューバーに"Data/Load Waves"の下の方に"Loading"という項目が付け加わります。
これを選択すると以下のようなダイアログが表示されます。
- 上から2番目"Name of path containing data files"はNewPathとすると新しくdataという名前のpahtを作ってくれる。
- 上から3番目"Wave names of y"は何もいれなくて結構です。入力するとloadされたwaveの名前が
(入力文字列)+(ファイル名)となります。
- 上から4番目"Wave names of x"はX軸(1列目)となるデータの名前です。
カスタマイズ、その他
- ここでKeyとなるコマンドはTextFile(pathName, index
[, creatorStr ])です。これはpathで指定したdirectryの中の
Textファイル(拡張子が.txt)を読みとるという作業を行います。
- IgorPro for Mac では .txt 以外の拡張子であってもTextファイルと認識して
Loadを行います。
- データファイルのColumn が2でない場合は、新たに文字列(String)を定義し、
最後の方にあるrename コマンドを修正してください。
また同様のProcを新たに作成し、cho_pro の変数を新たに作成しProcを呼び出すと便利です。
(その場合、上から1番目(What you want to name waves?)に新たな選択項目が増えます)
- 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
一つ上の項目に戻る