Chapter Sixty eight

第68話


専用の圧縮伸長ソフトに頼らずにLabVIEWだけで実行できるVIへの要望はある程度あるようだ。最近Info-LVでそんなスレッドが流れていた。

いま考えているのは、ZIPファイルを選択すると圧縮されているファイル名が表示されたり、圧縮したいファイルをまとめて選択して圧縮できるようなイメージだ。まだ、インターフェースの構想はまとまっていないのだが、圧縮、伸長を手軽に行えるものにしたいと思っている。今回は手軽な操作感でファイルを選択して、それらのファイルパスを集めるVIを作ってみよう。

機能的には、ダイアログを表示させてパスを集めればいいだけなので、あまり面倒な話ではない。

このVIではAddボタンが押されるとダイアログ画面が表示される。ダイアログ内でキャンセルされなければ、選ばれたFile Pathが配列の要素として蓄積される。この操作を繰り返し、必要なFile Pathを全て集めたらOKボタンを押す。

ダイアグラムはホワイルループとシフトレジスタにパスの配列を接続し、File Dialog関数から出力されるパスを配列に追加するものだ。

このVIはシンプルで好ましいが、1回のダイアログで1個しか選択することができないし、いちいちダイアログが出てくるのも気になる。

次にダイアログに頼らずに、VI画面の中でファイルパスを集めるVIを作ってみよう。

List Directory関数を使えば、指定したディレクトリに含まれるファイル名とディレクトリ名を知ることができる。また、複数項目選択リストボックスを使えば一度に必要なファイルを選択することができる。

これらを使ってとりあえず作ってみたのが右のFile list.viだ。ただし、使用できるのはこのVIが含まれているディレクトリにあるファイルだけだ。

このVIを実行するとファイル名がリストに表示される。リストに表示されたファイル名ををマウスで選択して、OKボタンを押すとファイルパスの配列ができあがる。

 

Current VIs Pathというパス定数を使えばVIのパスを知ることができる。Strip Path関数でVI名を外すとVIの置かれているパスになる。List Directory関数にこのパスを渡すとこのディレクトリに含まれるファイルが配列として出力される。

このファイル名の配列をリストボックスの属性ノードのItem Namesに接続するとリストボックスにファイル名が表示される。ユーザーがリストから必要な項目を選択するには操作のための時間を与える必要があるため、ホワイルループでOKボタンが押されるまで待とう。ファイル名が表示される前にOKボタンが押されるケースは少ないと思うが、一応、ファイル名の配列がホワイルループに到達してからループ動作が開始されるように"人為データ依存"のワイヤリングをしておこう。ホワイルループからは選択された行番号の配列が出力されるので、ファイル名の配列から対応するものを取り出してBuild Path関数でパスに直してパス配列が出来上がった。

実際にはこれではディレクトリの移動ができないので、延長線上でプログラミングを続けて行くとかなり複雑になってしまった。複雑な部分はできるかぎりサブVIに押し込めてみたが、属性接点を多用するとそれだけでスペースをたくさん取ってしまう。

デフォルトではこのVIの置かれているディレクトリから表示を行う。StartingPathに表示を開始するディレクトリを指示することができる。Path表示器には現在表示中のディレクトリが表示され、そこに含まれるディレクトリはFoldersリストに表示される。ファイルはFilesリストに表示される。

Filesリストから必要なファイルを必要な分だけ選択しAddボタンを押すとSelectionリストに追加される。Selectionリストを選択しDelボタンを押すことで取り消すことができる。

ディレクトリの移動はUpボタンで、さかのぼったり、Foldersリストを選択して深い部分に移動していくことができる。OKボタンを押すと選択されたファイルのパス配列を出力しVIは終了する。

ダイアログによるファイル選択をVIの中でできる限り気持ち良く実行できるように考えたため、複雑そうになってしまったが、プログラム自体は選択されたファイルをクラスターの中に追加していくだけの機能だ。Upボタンを押し続けるとPathがEmptyになってしまい、他のドライブに移動することができなかったので、そこだけは(ケース構造で表示されていないが)ダイアログに頼ることにした。
ZIPファイルからの伸長やZIPファイルからの一部削除も、このインターフェースで統一して行えるのではないかともくろんでいるのだが、はたしてうまく行くのだろうか?

See you!

Nigel Yamaguchi


戻る