この記事で扱っていること
- 指定の文字列をハイライトして表示する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWで文字列を表示する場合に、文字列表示器に対して表示したい文字列データを渡しフロントパネル上に表示します。
この表示の際のフォントやサイズはプロパティノードで変更可能です。
この機能を活かして、文字列の中から特定の文字列色を変更することで、検索したい文字がどこにあるか一目でわかるようにすることができます。
文字はファイルから読み取ることを前提にしていますが、その組み方として
- Wordファイル
- それ以外のテキストファイル(txtなど)
の2パターンを考えてみました。(とはいってもWordの方はNational Instruments社の資料にあったプログラムをほぼそのまま受け継いだだけですが)
どんな結果になるか
フロントパネルでは、読み込みたいファイルを指定するためのファイルパス制御器、検索したい文字列、そしてその文字列が見つかったときのハイライトカラーを指定できるようにしています。
プログラムを実行すると、一致する文字列の色を変更するように表示させることができます。
プログラムの構造
Wordからファイルを読み取る前提のブロックダイアグラムが以下のようです。LabVIEWのアドオンであるReport Generation Toolkitの関数を使用しています。
メインのVI上にある文字列表示器のプロパティをサブVIから変更することになるため、サブVIにはメインVIの結果文字列表示器のリファレンスを渡しています。
また、Wordの中身を読み取る前に結果文字列表示器の値プロパティに空白文字定数を渡しています。これをしないと、VIを連続で実行したときに、前の結果が残ることになります。
サブVIになっている部分がこのプログラムのキモで、以下のようにしています。
Whileループの中身で、どこの位置に検索対象の文字列があったかという情報を抜き出しています(検索対象がなくなるまで繰り返しています)。
その後、配列から削除関数で置換数と同じ指標に対して長さ1を指定し、配列の一番最後の値を削除しています。これをしないと希望する結果になりません(配列の最後の値が余計で、これを削除しないままだと全体が指定した文字列の色になってしまいます)。
なお、今回は検索対象の文字列を色を変えることで分かりやすくしましたが、テキストに対するプロパティはフォントの色だけではなくフォントの太さなども変えられるため、色を変化させる以外の方法でも検索対象の文字列を見やすくすることができます。
テキストファイルからの読み取りの場合
Wordでなくても、txtファイル(およびLabVIEWのFile I/O関数で読み出せるファイル)でも全く同じです。サブVIは使いまわせるので、以下のようにできます。
こちらも、上で紹介したプログラム同様、読み取る前に結果文字列表示器の値プロパティに空白文字定数を渡すことで、前の実行結果が残らないようにしています。
アルファベット一文字だけの場合は使えない
今回のプログラム、実はどんなときにも使えるかというとそうではなく、文字の検索時の置換条件の関係で、アルファベット一文字だけの場合には適用できません(日本語であれば平仮名一文字だけでも検索はできます)。パターンで一致の関数を駆使すれば実装可能かも・・・ですが、検索語の文字列が分割されたり、オフセットをずらしたりと工夫が必要です。その点、文字列の検索と置換関数は実装が複雑ではないためこちらを採用しました。
LabVIEWでデータを見るときには多く数値データを扱うことが多いと思いますが、文字(テキスト)データなどももちろん扱うことができます。そんなとき、データを扱いやすくする方法として参考にしてもらえればうれしいです。
ここまで読んでいただきありがとうございました。
コメント