0

我们的 C++ 代码库中有一个工具,可以将 EEG 浮点值输出到制表符分隔的文本中。例如,如果我们有 256 个通道和 550000 个样本,我们会输出一个 CSV 选项卡式测试文件,该文件应在 Excel 中打开,包含 256 列和 550000 行。

当我尝试在 Open Office 中打开此文件时(按照打开 TDT 文件的说明),我可以看到进度条运行得很慢,最终完成,但文件永远不会打开。

当我尝试在 Excel 2011 for Mac 中打开它时,它会挂起几分钟,然后我最终会看到一个对话框“内存不足”。我查看活动监视器,我有 16 gigs 的内存,大约 2.7 个正在使用,当 Excel 返回此消息时,我仍然有大约 6 gigs 内存可用。转换此文件后的大小从大约 560MB 变为 1.81 gigs,这对于值的字符串大小似乎是正确的。

较小的文件(例如 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