10-08-2020 02:17 AM
LabViewでバイナリファイルをcsvに変換する方法を探しています。
解決済! 解決策の投稿を見る。
10-08-2020 03:05 AM
tdakさん、はじめまして。
こちらのバイナリファイルは、中身がどのようなフォーマットで作成されているかは把握されていますでしょうか。
基本的には、
1. バイナリファイルを読み込む
2. フォーマットを参照して、バイナリファイルを変換する
3. 変換したデータをカンマ区切りの文字列にするか、文字列の配列にする
4. それをCSVとして書き出す
という流れです。
ただ、フォーマットがわからないと、文字列に戻せないと思いますので、まずはそちらからかと思います。
10-08-2020 08:50 PM
ke525 様
素人のため大雑把な質問で大変失礼いたしました。
おそらく、日付がフォーマットになっていると思います。
前任の者から添付したブロック線図のプログラムを引き継いだのですが、なぜかうまく作動しません。
具体的には、バイナリファイルの全データを変換できずにいます。
Highlight Executionの状態でプログラムを実行するとフロントパネルから実行するよりはるかに多くのデータをcsvファイルに変換することができました。
10-08-2020 09:14 PM
tdakさん、こんにちは。
まず現状ですが、
・バイナリデータをDoubleの2次元配列で変換しながら読み込んでいます。
なので、もし内容が浮動小数点でない(日付フォーマットのデータ)のであれば、この時点で数字が意味ないものになってしまうと思います。
VIとファイルを共有いただければ、少し試すことはできると思います。
・Highlightでデータ数が増える現象について
これはキューの利用が関わっています。上のループの右側でキューを削除していると思います。
下のループでデキューでデータを取っているところが実行される前にキューが削除されると、下のループからデータが出てこなくなります。
なので、Highlightでゆっくり実行すると、キュー削除が呼ばれる時間を遅らせられるので、その間にデータが取得できているのかと思います。
キューの中身が0になるまでキューを削除しないように作ると良いと思います。
方法としては、上のループとキュー削除の間にもう一つWhileループを入れます。
新しいループの中で、キューステータス取得を使い、キュー数のデータが0になったらループが止まるように作ります。
一度試していただきうまくいかないようであればサンプルみたいなものを作れると思います。もしくはVIを共有いただけるのであればそちらに少しコメントとか入れつつ実装サンプルも入れられると思います。
10-08-2020 09:26 PM
ke525 様
フォーマットですが、確かではありません。バイナリファイルが1Gbを超えるため共有できないのですが、フォーマットを確認する方法がございましたら、教えていただきたいです。おそらく、私がわかっていないだけで、このプログラムは正しいフォーマットに対して組まれていると思いますので問題ないと思います。
VIを共有させていただきます。
10-08-2020 10:25 PM
tdakさん
今のVIが正しいとすると、以前に書いたように2次元の浮動小数点のデータということになります。
バイナリファイルのフォーマットは作った人しか基本わかりませんので。。
一部はCSV変換できているのであれば、そのデータがカンマ区切りの数値になっているかどうかで確認できると思います。
ファイルは1GB以上とのことですが、Wordpadなどで開いて、後半部分をガッツリ削除して小さくすれば共有できるかと思います。
中途半端なデータになってしまってても途中までは読み込めると思います。
キューを削除しないように変更しましたので、一度試してみてください。
10-08-2020 11:48 PM
tdakさん
追記です。
今回のバイナリファイルを作成しているVIもしくはプログラムがあるのであれば、そちらを見ることでフォーマットがわかると思います。
ご参考まで。