04-25-2017 04:56 AM
こんにちは。教えていただきたいことがあり投稿しました。
データ量の非常に大きいファイルの読み込みを行いたいのですが、.csvのテキストデータから読み込みを行うと時間が非常にかかってしまいます。
そこで、バイナリファイルを読み込む方法を取ったところ非常に処理が早くなったのですが、汎用性を考えてエクセルの.xlsbファイルを使用する場合の読み込み方法が分からず困っております。
読み込み方法(例えば該当ファイルを読み込んで数値に変換し、配列に入れる等)をご存知の方がおられましたらご教授いただけないでしょうか。
解決済! 解決策の投稿を見る。
04-25-2017 10:50 PM
mnishita様
こんにちは。
バイナリファイルの読み込み速度と、汎用性を両立させたいとのことですが
バイナリファイルはどのように作成していますでしょうか?
例えば、バイナリファイルはLabVIEW上で書き込みを行い、そのファイルを再びLabVIEW上で読み込んでいるのでしょうか?
この場合、収録したデータをExcel上で表示する必要があるのであれば
データ形式としてTDMSファイルを使用してみてはいかがでしょうか?
TDMSではデータをバイナリ形式で取り扱うことで高速なデータの取り扱いが
可能になっており、またMicrosoft Excelでデータを表示させるためのアドインも無償(リンク1)で提供されています。TDMSファイル形式の詳細に関しては以下のリンク2が参考になるかと思います。
なおLabview上のサンプルファインダから「TDMS」で検索すると、すでに作成されているViを利用することも可能です。
リンク1 http://www.ni.com/example/27944/en/
リンク2 http://www.ni.com/white-paper/3727/ja/#toc2
ぜひお試しいただければと思います。
04-26-2017 12:19 AM
Tombo1111様
ご回答ありがとうございます。
質問にお答えいたします。
例えば、バイナリファイルはLabVIEW上で書き込みを行い、そのファイルを再びLabVIEW上で読み込んでいるのでしょうか?
→元々は.csvファイルの直接読み込みを行っていたのですが、今回は読み込み速度の上昇を確認するために、.csvファイルの内容をLabVIEW上でファイルI/Oパレットのバイナリファイルに書き込みでセーブを行い、そのファイルを再びLabVIEW上で読み込んで読み込み速度上昇を確認いたしました。
また、TDMSファイルの情報ありがとうございます。
内内でクローズするデータ処理であればこちらを使用したいのですが、環境が整っていない複数ユーザーに提供する必要がある為、データを表示するアドインのインストールをユーザー毎に行ってもらうのは現実的ではなく、難しいかと思っております。
Office環境であればほとんどのユーザーが持っているため、.xlsbファイルをLabVIEW上で直接読み込むことができれば、と思い今回の質問を行った次第です。
04-26-2017 05:00 AM - 編集済み 04-26-2017 05:07 AM
mnishita様
こんにちは。
ご返信ありがとうございます。
>>データを表示するアドインのインストールをユーザー毎に行ってもらうのは現実的ではなく、難しいかと思っております。
とのことですが仮にexeファイルを配布する場合、ビルドの際のインストーラにNI TDM Excelアドインを含めることで、ユーザー側でのExcelアドインインストールの設定の手間が省けると思いますが、如何でしょうか。
さて、labVIEW上で.xlsbファイルに書き込まれたデータを読みとる必要がある場合、やはりひと手間かかってしまうのですが、データプラグインをご使用いただくことにより、NI LabVIEWでのデータファイルアクセス機能の拡張が可能です。これによりLabVIEW上で直接.xlsbファイルの読み込みが行うことができます。以下が具体的なステップになります。
1.まずリンク1より、Excel Automation Example DataPluginをダウンロードします。
2.LabVIEWサンプルファインダから「データプラグインマネージャ」の検索を行います。表示されたサンプルVIを実行し、フロントパネル上のインポートをクリックし先ほどダウンロードしたExcel Automation Example.uriをインポートします。これでプラグインのインポートが完了します。
3. 例えば、すでに作成してある.xlsbファイルを読み込みたい場合、「ファイルI/O」→「ストレージデータ/プラグイン」より「データストレージを開く」および「データを読み取る」 Express VIを使用し、配線した後に読み取りを行います。
リンク1 http://www.ni.com/example/30208/en/
ぜひお試しいただければと思います。
04-26-2017 08:25 PM
こんにちは。
ご回答ありがとうございます。
>>ビルドの際のインストーラにNI TDM Excelアドインを含めることで、ユーザー側でのExcelアドインインストールの設定の手間が省けると思いますが、如何でしょうか。
ご指摘ありがとうございます。TDMSファイルの導入も検討しようと思います。
本題の.xlsbファイルの読み込みについてですが、2.の項までは完了したのですが、3.の項で参照するデータの参照するファイルとどのように配線を行えばよいかが分かりません。
お手数をおかけしますが、配線情報、サンプルなどございましたら、お教えいただけますと大変助かります。
04-27-2017 12:56 AM
mnishita様
こんにちは。
では、簡単なviですが取り急ぎ作成致しましたので添付いたします。
この例では「データストレージを開く」関数側でファイルプラグインとファイルパスを指定、そのリファレンスを「データを読み取る」関数に渡すことで、配列の中に.xlsbファイルに含まれる数値データを読み込んでいます。
ぜひお試しいただければと思います。
04-27-2017 03:11 AM
ご回答ありがとうございます。
申し訳ございません。LabVIEWのバージョンが低いため参考のViが開けません。
お手数をおかけいたしますが、フロントパネルとブロックダイアグラムを画像データとして添付いただけないでしょうか。
04-27-2017 04:00 AM - 編集済み 04-27-2017 04:00 AM
こんにちは。
では、実行結果を表示したフロントパネル、ブロックダイアグラムのスクリーンショットを添付いたしますね。
ファイル形式上このフォーラムでは読み取り時に使用した.xlsbファイルをアップロードできないのですが、単純にシート上A1からA8に1から8の数字を入力しました。
以上ですが、ご参考になれば幸いです。
04-27-2017 05:26 AM
Tombo1111様
ご回答ありがとうございます。
1次元配列の読み込みは成功いたしました。
読み込むファイルが2次元のファイルの場合はどのような処理を行えばよろしいでしょうか。
質問が多く申し訳ありませんがご教授のほどよろしくお願い致します。
04-27-2017 05:59 AM - 編集済み 04-27-2017 05:59 AM
二次元配列データを読み込みたい場合は「データを読み取る」関数上で配列データタイプを指定の後、「転置行列」関数を用いて配列を転置させることで希望する形でのデータ読み込みが可能になるかと思います。参考までにviのフロントパネルとブロックダイアグラムの結果のスクリーンショットを添付いたします。この例ではシート上B1からB3に9から11の数字を追加しています。
ご参考になりましたら幸いです。