この記事で扱っていること
- 表の中身を範囲選択して取り出す方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWの表制御器は、その名の通り表形式でデータを扱うことができます。
なので、表の形式で用意しているデータ、例えばcsvファイルから読みだしたデータを扱うのに便利だったりするのですが、その中の一部を別の表に移すといった操作をするには少し工夫が必要になります。
本記事では、ある表から別の表にデータを移す方法の一例を紹介しています。
どんな結果になるか
表が二つフロントパネルに配置してあり、片方は元データを表示しそこから選択した範囲のデータをもう片方の表に移します。
移すデータの元が表にある状態で、複数のデータを選択しドラッグ、表2の移したい場所でドロップすることでデータを移します。
プログラムの構造
大まかな流れとしてはイベントストラクチャを使用したプログラムになります。
マウス操作をトリガとして表や表2のデータを扱うためにマウスアップイベントを使用しています。
まず表のマウスアップイベントです。
表に対するプロパティノードの項目で「選択開始」と「選択サイズ」を使用し、これらのクラスタデータをバンドル解除した値を、表制御器に対して部分配列でデータを抽出する際の範囲の指定に使用します。
抽出したデータは表2のマウスアップイベントで使用します。
ただし、表2に表示させる際に部分配列置換を使用している関係上、ドロップする位置に何もデータがない場合には表2にデータをドロップ操作で追加するといったことができません。
そのため、表2に無理やりデータを用意するための処理が必要になり、array_resize.viというサブVIとしてまとめています。
サブVIは以下のようなフロントパネルとコネクタペーンを持っています。
サブVIの動作としては基本的には配列初期化で空のデータを無理やり用意しているのですが、もし表2の一部に既にデータがある場合にはそのデータを表2に反映させるようにしています。(そうしないと表2に既に表示しているデータが毎回消えてしまうため)
少しワイヤの配線が複雑ですが、以下のように組んでおきます。
最後は停止ボタンの値変更イベントです。
表のデータをクリップボードに貼りつける場合
表から選択した部分のみをすぐにLabVIEW外部で使用するために、例えばクリップボードに貼りつけるということが考えられるかと思います。
インボークノードの項目でクリップボードに貼りつけるという選択肢があるのですが、データのみを取り出してテキストファイルに貼り付け、ということがなぜかできないようなので(これ理由分かる方いましたらコメントで教えてください・・・)、代わりにイメージとして取得してクリップボードに出力という方法が考えられます。
以下の例では、クリップボードに貼り付けするようにブール制御器のボタンを一つ追加しています。
このような操作をしたい場合には、マウスアップイベントを編集します。
・・・といっても、表の方のマウスアップイベントは何も変わりません。
変わるのは(フロントパネル上では画面外に配置している)表2のマウスアップイベントですが、特に難しいことはなく、まず表2にデータを渡し、その後インボークノードで画像をエクスポートのメソッドを選択しています。
ここで、TargetとしてClipboardを選択することでクリップボードに貼り付けることができます。
本記事では、表の中身を範囲選択して取り出す方法を紹介しました。
複数選択して必要なデータのみ扱いたいときに参考にしてみてください。
ここまで読んでいただきありがとうございました。
コメント