C++ コードベースには、EEG 浮動小数点値をタブ区切りテキストに出力するツールがあります。たとえば、256 チャネルと 550000 サンプルがある場合、256 列と 550000 行で Excel で開く必要がある CSV タブ付きテスト ファイルを出力します。
このファイルを Open Office で (TDT ファイルを開く手順に従って) 開こうとすると、プログレス バーの動作が非常に遅くなり、最終的には終了しますが、ファイルは開きません。
Excel 2011 for Mac で開こうとすると、数分間ハングし、最終的に「メモリが不足しています」というダイアログが表示されます。アクティビティ モニターを見ると、16 ギガのメモリがあり、約 2.7 ギガが使用されています。Excel がこのメッセージを返すまでには、まだ約 6 ギガのメモリが使用可能です。このファイルが変換された後のサイズは、約 560MB から 1.81 ギガになり、値の文字列サイズとしてはほぼ適切と思われます。
100000 サンプルや 256 チャンネルなどの小さなファイルは問題なく開き、正しく表示されます。
Excel のドキュメントによると、100 万行以上、16000 列程度を表示できるはずです。
ファイルをチェックする Python スクリプトを書きましたが、550,000 行あります。また、C++ テスト コードをいくつか書き、それが私が行っていることではないことを確認しました。
コードスニペット:
// C style file stream.
#include <cstdio>
#include <iostream>
int main(int argc, const char * argv[])
{
std::cout<<"Procesing"<<std::endl;
std::string fileURI = "/Users/mmurphy/Desktop/TabbedTestFile.txt";
float eeg = 87658.98765;
// Create a C style file stream object.
FILE* dataStream;
dataStream = fopen(fileURI.c_str(), "w+");
for(int32_t s = 0; s < 550000; s++){
for(int32_t c = 0; c < 256; c++){
fprintf(dataStream, "%f\t",eeg);
}
// Simulate the Vref Channel (257)
fprintf(dataStream, "%f\n",0.0);
}
// Close the fileStream
fclose(dataStream);
std::cout<<"Complete"<<std::endl;
}
列数を 256 から 3 に変更すると、問題なく動作します。これは Excel と OO の両方で発生しているため、OS Mavericks で導入された何らかのバグがある可能性がありますか?
どんな情報でも大歓迎です。