この記事で扱っていること
- プロジェクトに入っているプログラムなどを一覧で表示する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWでプログラムを書いているとき、特に最終的にEXEにする場合には、必ずプロジェクトエクスプローラを使用してプログラムを管理することになります。
ある程度の規模のプログラムとなると使用するサブVIも多くなるため必然的にプロジェクトに多くの項目が並ぶことになりますが、プログラム作成段階で一時的に作っていて最終的には要らないプログラムも出てくることがあります。
プロジェクトエクスプローラからそれらを除外するのはともかくとして、実際のプログラムファイルであるVIやその他ctlファイルなどについても、PCのフォルダ上に存在する必要のないものは除外してスッキリさせたいのですが、どのプログラムがプロジェクトに含まれていてどれが含まれていないのかを調べるのはなかなか面倒です。
そこで、プロジェクトに含まれているVIやctlファイルを一覧で表示するプログラムを作ってみました。これを応用して、特定のフォルダの中にある、使用されていないファイルを抽出することもできます。
どんな結果になるか
プログラムとしてはプロジェクトを選択するパス制御器と、結果を示す文字列表示器、あるいはパス表示器を用意しています。
例えば以下のような構造を持つプロジェクトを例にとります。
このプロジェクトに対して今回のプログラムを適用するとこうなります。仮想フォルダや自動更新フォルダの中身などもリストに表示できます。
またパスで表示する場合にはそれらのプログラムをを探す際に便利です。
プログラムの構造
実はもっと簡単な方法がある・・・のかもしれませんが、愚直にインボークノードでプロジェクトを指定するところから始めて各種リファレンスを取得するようにしています。
リファレンスの取得順序としては
プロジェクト、(プロジェクトエクスプローラ上の)マイコンピュータ、子項目
となっていて、外側のForループの中身の子項目としては仮想フォルダなどが該当するのでその中身を取得するためにもう一度Forループを使用しています。
パスで取得する際には「名前(Name)」ではなく「パス(Path)」に変えるだけです。
入れ子になったForループを抜けた後は配列で表示させるための処理として次元変更を行い、最後のForループで特定の拡張子のファイル(今回の例で言えばviかctl)のみを抽出するようにしています。
入れ子に注意
今回のサンプル、仮想フォルダや自動更新フォルダの中身が入れ子になっている場合には注意が必要です。
上で紹介したプログラムはあくまでプロジェクトエクスプローラ上にある仮想フォルダや自動更新フォルダの中身のviやctlファイルを拾っているだけであり、これらの中にさらにフォルダが入れ子になっている場合、例えば「仮想フォルダ内の仮想フォルダにあるプログラム」は拾うことができません。
ただ、仮想フォルダの中に仮想フォルダを使用する場合は少ないであろうことと、自動更新フォルダの中身については最悪そのフォルダ自身を再帰ファイルリストの関数を使用すれば見れることから妥協しています。
プロジェクトに入っていないファイルをリストする
「プロジェクトエクスプローラに含まれていないプログラムなど」が、そのプロジェクトが入ったフォルダに存在している場合に、これら「プロジェクトエクスプローラに含まれていないプログラムなど」をリストするための処理としては例えば以下が考えられます。
処理にはファイルI/Oパレットの中の上級ファイル関数パレットにある再帰ファイルリストの関数を使用しています。
今回の記事ではプロジェクトに含まれるプログラムなどを表示する方法、および含まれないプログラムなどを表示する方法を紹介しました。
何となく・・・これらよりももっとうまい方法があるような気もしますが、今回のプログラム自体はそこまで処理速度などに効率を求めるわけではないので機能として自分が期待したとおりに動作しているところで満足していますが、適宜改造してみてください。
ここまで読んでいただきありがとうございました。
コメント