質問
ASCII のみで出力ファイルを書き込めるプログラムを、バイナリ データ (具体的には 32 ビット float) を書き込めるようにするにはどうすればよいですか?
- 最良の答えをどのように想像するか:浮動小数点値をASCII文字にエンコードして、プログラムがそのASCIIエンコード値を(.txtファイルに)書き込み、結果の.txtを.binに名前変更して、バイトを持つテクニックバイナリとして直接読み取ることができるように設定された構造体 (できれば、float32 または float16、ビッグエンディアンまたはリトルエンディアン)。
- 回避策をどのように想定するか: ASCII 値を、たとえば .vbs または .bat ファイルに書き込み、プログラム内からシステム コールを介して起動できる手法。.vbs/.bat/etc. (ASCIIからハードコードされた)値を取得し、それらを目的のバイナリ形式で書き出します。
バックグラウンド
- セットアップの詳細: サードパーティ ソフトウェア (「3PSW」) アプリケーション (光学分析の業界標準、FYI) と、長時間の計算分析をセットアップするために使用する便利なマクロ言語があります。3PSW はシステムコールを行うことができます。Windows XPで実行しています。
- 問題が重大な理由: (A) 出力データを大きな 1000x1000 マトリックスに書き込むのに時間がかかり、この IO ボトルネックが 3PSW で調査できる範囲を制限している (B) ASCII 出力がかなり多くのディスクを占有する(C) 3PSW の出力を別のプログラムが読み取るために、特定のバイナリ形式にする必要があります。
- 現在の回避策: ASCII 出力を読み取り、目的のバイナリ形式で書き出す MATLAB スクリプトがあります。これにより機能が確立されますが、再フォーマット/再書き込みの手順では手順にさらに時間がかかり、RAM メモリの使用量が原因で MATLAB と 3PSW の両方がハングすることがあります。計算時間のコストにより、解空間を探索できる粒度が制限され、結果の品質が損なわれています。RAM を集中的に使用する MATLAB の代わりに VBSCRIPT を使用して再フォーマットを行うと、期間に影響がなくても、メモリが原因で MATLAB や 3PSW がハングする可能性が減少します。
- 私はこの件について 3PSW のベンダーに通知しており、将来のリリースに含める予定があるかどうかは彼らの意のままです。
ヘルプ/提案/ガイダンス/リダイレクトは大歓迎です。考慮に入れる時間も同様です。ありがとうございました。