この記事は、初心者向けのまずこれシリーズ第7回の補足記事です。複雑な構造を持ったデータを保存したい、という方向けにもう少し内容を補足しています。
保存したいデータが複雑な場合の対応
まずこれのシリーズで、データをファイルへ保存する方法を紹介してきました。
データの保存は、プログラム作りで特に重要で、特にハードウェアの操作を得意とするLabVIEWではファイル保存を行う場面が頻繁に出てくると思います。
ただ、実際問題データの保存方法には苦戦する場面も多いと思います。
例えば、波形データ(データ配列以外に時間情報も含んだもの)を保存する場合、「テキストファイルに書き込む」の関数で時間情報ごと保存する場合にはちょっと工夫が必要だったりします。

そんな場合に私が個人的に(というかおそらくLabVIEWの思想的には公式的にも)推しているのはTDMSファイルへのデータ保存です。TDMSの場合には波形データをそのまま配線することで保存することができます。

この方法の弱点としては、TDMSデータを見るための手段としては通常Excelにアドオンを入れる方法しかない点が挙げられます。
また、もう一つの弱点としては、TDMSに書き込める(関数に配線できる)データタイプに制限があります。

プログラムの中で扱うデータタイプは実際はこの限りではないと思います。
特にクラスタを使用している場合、複数のデータタイプの組み合わせみたいな構造を持った「オリジナルのデータ形式」を扱っているはずで、それを保存するとなると通常の方法だとかなりややこしいプログラムになってしまいます。
そんな場合に選択肢になるのが「データログ」への保存です。
データログ関数の使い方
データログ関数はファイルIOの上級パレットにあります。

複雑な構造を持ったデータを保存するってどういうこと?と思われる方もいるかと思いますので、まずはサンプルを見てみましょう。

このサンプルでは、ある構造を持ったクラスタをクラスタのまま保存しています。このようにデータログ関数を使用するとクラスタをそのまま保存させることができます。

読み取りの時にも、そのクラスタのデータを指定して読み取らせるだけです。

このような操作を行うときにはクラスタを「タイプ定義」しておくと便利です。保存のプログラムと読み取りのプログラムを別個にしている場合、タイプ定義のファイルを使用することで確実に同じ構造を持ったクラスタを指定することができるようになるためです。

このように、データログ関数を使用することで、オリジナルのデータ形式を持ったクラスタをそのまま保存の関数に配線、ファイルに出力することができます。
せっかくなのでサンプル以外のプログラム例も紹介します。サンプルよりももっと複雑なクラスタを扱う場合にも役立ちます。
以下に示しているのは、ピクチャの情報と適当な数値データ、そして画像ファイル名としての文字列情報をクラスタにしてまとめたものを保存している例です。

このように、画像としてのデータが含まれている場合にも読み取り用のデータログプログラムで復元することができます。

データログの注意点
データログファイルの長所がわかったところで、弱点も知っておく必要があります。
ずばり、「保存されたファイルの中身を他の方法で読めない」ことに尽きると思います。テキストファイルとして開いても文字化けのような表示となってしまい、直接確認することができません。

データログファイルの中身を見るためには、データログファイルを見るためのプログラムを用意する必要があります。
・・・とはいえ、データログの関数を使って保存するような複雑なデータはそもそもLabVIEWの中で表示するときに使用するくらいなものなので、このデータをファイルからそのまま(LabVIEWを介さないで)見たいというニーズは少ないと思います。
なお、ファイルI/Oとしてはデータログの関数でなくても「バイナリファイルに書き込む」の関数でもクラスタのデータを書き込むことができます。なのでバイナリファイルでもいいじゃないか、と思うかもしれませんが、サンプルにあったような複数のデータの書き込みを行い、それを読み込ませるという処理はバイナリファイルではそのまま扱うことができません。

もちろんバイナリファイルに書き込むことが便利ケースもあると思うので、場合によって使い分けられればいいと思います。
この記事では、データを保存する方法としてデータログの関数を紹介しました。
単なる数値や文字列の配列などはテキストファイルに書き込む関数や場合によってはTDMSファイルへの書き込みの方がファイルを直接開くことができるなど便利な場面が多いと思いますが、こういったファイルI/Oの関数で保存させるには複雑になってしまうようなデータ形式を扱う場合の選択肢として覚えておくといいと思います。
ここまで読んでいただきありがとうございました。
コメント