マクロの組み方Part10(データのを連続でロード)
基礎知識は
Igor基礎知識(ウェーブのロード) - Igorの解説とか
ここから。
必要ならば下にあるテキストファイルをダウンロードください。
自分が持っているテキストデータファイルがある方が実践的で良いです。
ただし、data1.txt,data2.txt...などといった、連番になっているファイルがよいです。
テキストデータのロードは
で行うことが出来ます。
Loadwaveでロードすると、S_pathとS_filenameという2つの文字列が作られます。
一回ウェーブをロードした状態で
とコマンドラインへ打ってみましょう。
そうすると、データファイルを指定しなくても、ロードできるはずです。
ではS_pathとS_filenameの内容を
Print S_filename
と打って確認してみましょう。
S_pathはファイルが置かれているディレクトリのパス、S_filenameはファイルの名前となっているのがわかると思います。
それではこれを使ってフォルダの中にあるファイルを連続でロードしてみましょう。
String FileNameRef,FileExtension
Variable FileNum
Prompt FileNameRef,"Enter the file name" //Fileの名前を入力
Prompt FileNum,"Enter the number of files" //Fileの数を入力
Prompt FileExtension,"Select File's extension",popup ".txt;.csv;none" //Fileの拡張子を入力
if(cmpstr(FileExtension,"none")==0) //このままではnoneという拡張子があるようになってしまう
FileExtension="" //noneを空白に
endif
Variable FileLetter=strlen(FileNameRef) //Fileの名前の文字数
Loadwave/G/Q/A //ロードするデータのpath,nameを取得
variable i=2 //一行前でi=1の場合はLoad済み
Do
Loadwave/G/Q/A S_path+S_filename[0,FileLetter-1]+num2str(i)+FileExtension //得た情報をもとにロード
i+=1
while(i<=FileNum) //入力したデータの数でロードを終わらせる
End
なおS_filename[0,FileLetter-1]というのは、例えば"data1.txt"という名前のデータをロードした時、
data・・・固定するファイル名
1・・・ループで回す変数
.txt・・・固定する拡張子
であり、変数はiで、拡張子はFileExtensionで指定するので、dataが欲しいわけです。
今回はあくまでS_filenameを使いたいという私のわがままで話を進めているので、
S_filenameの1文字目(0)〜4文字目(3)が欲しいため
S_filename[0,3] (3="data"の文字数-1)
としています。
もちろんS_filename[0,3]をFileNameRefに変更しても動きます。というよりこちらの方が自然ですね。
それと、cmpstrは
の形で用い
String1とString2が同じならば0
String1の方がString2よりもアルファベット順で前なら-1、後なら1
を返します