前回は、同じデザインのグラフを描くために必要なスタイルマクロをご紹介しました。今回は、複数のファイルをロードする方法をご紹介します。この二つを組み合わせれば、たくさんあるデータを順に読み込んでグラフを作成するなんてフローが実現できるはず。

▼ 複数のファイルを選択

実は、この話題のキーポイントの一つは、以前このブログ(IGOR Pro/6.1 お勧めの機能)で紹介しています。

もうひとつ、これまでの IGOR Pro では、ファイルを開くときに指定できるファイルは1つだけでしたが、6.1 では OPEN コマンドに適切なフラグを用いることで、複数指定できるようになりました。これは、複数のファイルを取り扱うようなプロシージャを作成している方にはきっと福音です。

ポイントは、OPEN 操作関数の /MULT フラグです。次のような関数(1)を定義しておいて、

Function OpenMultiFiles()
    Variable aa
    OPEN/D/R/MULT=1 aa
    Print S_fileName
End

コマンドラインで

OpenMultiFile()

と実行すると、「ファイルを選択(Select file)」ダイアログが開かれます。

01.png

/MULT=1 フラグによって、複数のファイルを選択できる設定で、このダイアログは開かれますので、たとえば Windows 7 サンプル画像のフォルダで、こんな風に複数の画像ファイル(アジサイ、クラゲ、コアラ、チューリップ)を選ぶことができます。

02.png

選択したファイル名は S_fileName という文字列変数に保存されますので、 Print 関数で出力することができるわけです。

*OpenMultiFiles()
C:Users:Public:Pictures:Sample Pictures:Hydrangeas.jpg
C:Users:Public:Pictures:Sample Pictures:Jellyfish.jpg
C:Users:Public:Pictures:Sample Pictures:Koala.jpg
C:Users:Public:Pictures:Sample Pictures:Tulips.jpg

このように、S_fileName には選択したファイルすべてのフルパスがひとまとめに保存されます。

さて、話が前後しますが、変数 aa についても説明しておきましょう。ここまで、変数 aa には値を代入してもいなければ、値を参照することもしていません。何かの役に立っている気配がありませんね。

実はそれが正解。aa は、OPEN 操作関数で開くファイルの参照番号を保存する数値変数なのですが、ファイルを選択(Select file)ダイアログを利用する場合には、実際にはファイルを開きませんので、この変数を利用することはありません。ただし、OPEN 操作関数を利用するときには、このファイル参照番号を格納する変数が *必須* なので、上の関数ではダミーで変数 aa を用意しています。


▼ 複数のファイルパスを取得

複数のファイルを「選択」して、それらのファイルパス(フルパス)をひとまとめに手に入れることはできました。でも、まだ選択したファイルごとのパス情報は得られていませんね。S_fileName から、ファイルごとのフルパスを取り出す処理は次のようにやります。

まず、先ほどの print の出力が自動的に改行されていることから、 S_fileName には選択したファイルパス(フルパス)が改行(\r)で区切られて保持されていることがわかります。すなわち、改行を数えてあげれば、いくつのファイルが選択されていたのかを知ることができます。

文字列変数の中に、特定の文字、今回の場合では改行コード(\r)がいくつ含まれているのかを調べるには ItemsInList 操作関数を使います。

Function OpenMultiFiles()
    Variable aa
    OPEN/D/R/MULT=1 aa
    Print ItemsInList(S_fileName, "\r")
End

実行すると、

*OpenMultiFiles()
  4

ファイル数 4 が出力されます。こうすることで、選択したファイル数がわかりますので、あとは、S_fileName からファイルパスを順に4つ取り出しながら、必要な処理を実行すればOKです。S_fileName のように特定の文字列(今回は \r)で区切られた文字列変数を、 IGOR Pro では「リスト(List)」と呼びます。リストから、区切り文字ごとに情報を取り出すには、StringFromList 操作関数を利用します。今回選択したファイルはサンプル画像ですので、画像データをロードして、イメージプロットを作成する処理を組み込んでみます。

Function OpenMultiFiles()
    Variable aa
    OPEN/D/R/MULT=1 aa
    
    String FilePaths
    FilePaths = S_fileName  //(*)
    
    If(Strlen(FilePaths)!=0)  //(**)
        Variable NumOfPath
        NumOfPath = ItemsInList(FilePaths, "\r")

        String Path
        Variable i
        For (i=0; i<NumOfPath; i+=1)
            Path = StringFromList(i, FilePaths, "\r")
            ImageLoad/T=jpeg/O/G Path
        EndFor
    EndIf
End

どうでしょう、うまくイメージプロットが4つ表示されましたか?途中、(*) のところで、S_fileName を FilePaths で受けなおしているのは、ImageLoad 操作関数で画像をロードすると、S_fileName 変数がロードしたファイル名で上書きされてしまうためです。また、(**) の If 文はファイルを選択(Select File)ダイアログをキャンセルした場合に対応するためです。

もうひと工夫。ファイルフィルタに画像ファイルを指定するにはこんな風にやります。

Function OpenMultiFiles()
    Variable aa
    String fileFilters = "Image Files (*.jpg,*.jpeg,*.png):.jpg,.jpeg,.png;"
    fileFilters += "All Files:.*;"
    OPEN/D/R/MULT=1/F=fileFilters aa
    
    String FilePaths
    FilePaths = S_fileName
    
    If(Strlen(FilePaths)!=0)
        Variable NumOfPath
        NumOfPath = ItemsInList(FilePaths, "\r")

        String Path
        Variable i
        For (i=0; i<NumOfPath; i+=1)
            Path = StringFromList(i, FilePaths, "\r")
            ImageLoad/T=jpeg/O/G Path
        EndFor
    EndIf

End


▼ まとめ

ファイルを選択(Select File)ダイアログで複数ファイルを選択して、ファイルごとのファイルパスを取得し、イメージプロットを作成するというフローを自動化するプロシージャを作ってみました。ポイントは OPEN 操作関数の複数選択オプションとその後の文字列処理でした。前回の記事と合わせると、便利なプロシージャが作れそうですね。

--
井上@技術部でした。

(1) 本当は関数でなく直接コマンドラインで OPEN/D/R/MULT=1 aa を実行すれば動作するはずですが、6.22 までは不具合があり、ユーザ定義関数内でしか動作しません。6.23 で修正される予定です。

※この記事の内容は執筆者の個人的見解で、ヒューリンクスによる公式情報ではありません。[免責事項]

トラックバック

この記事へのトラックバックURL
http://blog.hulinks.co.jp/cgi/mt/mt-tb.cgi/495
内容に対しての関連性がみられないものは削除する場合があります

iphone/ipadケース - iphone/ipadケース on 2013/12/20 at 7:24 AM 

IGOR Pro/複数のファイルをロード(Load Multiple Files) - ヒューリンクス(HULINKS)ブログ 続きを読む

IGOR Pro/複数のファイルをロード(Load Multiple Files) - ヒューリンクス(HULINKS)ブログ 続きを読む

IGOR Pro/複数のファイルをロード(Load Multiple Files) - ヒューリンクス(HULINKS)ブログ 続きを読む

財布/小物 - 財布/小物 on 2014/01/21 at 5:11 AM 

IGOR Pro/複数のファイルをロード(Load Multiple Files) - ヒューリンクス(HULINKS)ブログ 続きを読む

財布/小物 - 財布/小物 on 2014/01/22 at 3:33 AM 

IGOR Pro/複数のファイルをロード(Load Multiple Files) - ヒューリンクス(HULINKS)ブログ 続きを読む

IGOR Pro/複数のファイルをロード(Load Multiple Files) - ヒューリンクス(HULINKS)ブログ 続きを読む

コメントの投稿

Emailアドレスは表示されません。は必須項目です。
ヒューリンクス取り扱い製品の内容や購入に関するお問い合わせはヒューリンクスサイト連絡先へお願いいたします。投稿前にその他の注意事項もご覧ください。

HULINKS サイトの新着情報