たまによくある

あれこれ

【igor】フォルダ内のすべてのファイルを読み込む

note.com

参考、、というかこれを直した。

 

先に使った関数の補足解説。省いたところは自分でigorのヘルプブラウザを確認してください。

 

LoadWave [flags] fileNameStr

ファイルを読み込む。

flag: A  ダイアログをスキップ, O wave名が重複するときに上書き, G おまじない, B wave名などを設定できる。

fileNameStrを指定しなければ、ダイアログが開いて自分でファイルを選択する。一度ロードすると、最後にロードしたファイル名は$S_filenameで、フォルダのパスは$S_pathで呼び出せる。

 

IndexedFile(pathName, index, fileTypeOrExtStr)

pathNameで指定したパスの中の、fileTypeOrExtStrindexで指定したファイル形式の、indexで指定したファイルの名前を呼び出す。ファイルが存在しない場合は""を返す。

 

以下コード

////フォルダ内のファイルをまとめてロードする////
Macro multiload()
loadwave/A/O/G/B="N='_skip_';N='_skip_';"
newpath target , S_path
// loadしたいフォルダの中のファイルを選択し、そのフォルダのpathを取得する。
make/wave/O/N=100/T flist
// flistをテキストウェーブとして定義。ファイルは100個まで読み込む。
 
variable i = -1
    do
    i = i + 1
    flist[i] = indexedfile(target, i, ".txt")
// flistにフォルダ内のtxt形式のファイルの名前を取り込む
    While ((cmpstr(flist[i], "") != 0))
// flist[i]と""を比較し、i番目の名前が""になる(=ファイルが全部読み込めた)まで処理する。
// cmpstrは一致の時に0を返すので、値が0でない限りdoからループを繰り返す
 
 
string loading
// 読み込むファイルのパスを仮置き
variable j = 0
    do
    loading = S_path + flist[j]
// フォルダ内のj番目のファイルのS_pathとファイル名を結合してフルパスを作る
    loadwave/A/O/G/B="N=wavelength;N=dummywave;" loading
// j番目のファイルをロードする
    rename dummywave , $S_filename
// dummywaveをファイル名に直す。
    j = j + 1
     While ((cmpstr(flist[j], "") != 0))
// フォルダ内のtxtファイルに対してロードを行う
 
deletepoints j, 100, flist
// listウェーブの空欄を消す。 
Endmacro