0

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 で導入された何らかのバグがある可能性がありますか?

どんな情報でも大歓迎です。

4

0 に答える 0