Igorの解説とか

このブログはWavemetrics社が開発および販売しているIgorについて解説するブログです。

マクロの組み方Part10(データのを連続でロード)

基礎知識は

Igor基礎知識(ウェーブのロード) - Igorの解説とか

ここから。

 

必要ならば下にあるテキストファイルをダウンロードください。

data.zip - Google ドライブ

自分が持っているテキストデータファイルがある方が実践的で良いです。

ただし、data1.txt,data2.txt...などといった、連番になっているファイルがよいです。

 

テキストデータのロードは

Loadwave/G

で行うことが出来ます。

Loadwaveでロードすると、S_pathとS_filenameという2つの文字列が作られます。

一回ウェーブをロードした状態で

Loadwave/G S_path+S_filename

コマンドラインへ打ってみましょう。

そうすると、データファイルを指定しなくても、ロードできるはずです。

ではS_pathとS_filenameの内容を

Print S_path
Print S_filename

と打って確認してみましょう。

S_pathはファイルが置かれているディレクトリのパス、S_filenameはファイルの名前となっているのがわかると思います。

 

それではこれを使ってフォルダの中にあるファイルを連続でロードしてみましょう。

 

データを連続でロード
Macro example(FileNameRef,FileNum,FileExtension)
 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は

cmpstr(String1,String2)
の形で用い
String1とString2が同じならば0
String1の方がString2よりもアルファベット順で前なら-1、後なら1
を返します

 

目次 サイト目次 - Igorの解説とか

前 マクロの組み方Part9(If-else文、比較演算子、論理演算) - Igorの解説とか

次 マクロの組み方Part11(Cursorを用いる その1) - Igorの解説とか