У нас есть инструмент в нашей кодовой базе C ++, который будет выводить значения с плавающей точкой ЭЭГ в текст с разделителями со вкладками. Если у нас есть, например, 256 каналов и 550000 выборок, мы выводим тестовый файл с вкладками CSV, который должен открываться в Excel с 256 столбцами и 550000 строками.
Когда я пытаюсь открыть этот файл в Open Office (следуя инструкциям по открытию файлов TDT), я вижу, что индикатор выполнения работает очень медленно, в конце концов он заканчивается, но файл не открывается.
Когда я пытаюсь открыть его в Excel 2011 для Mac, он зависает на несколько минут, а затем у меня появляется диалоговое окно «Недостаточно памяти». Я смотрю на монитор активности, и у меня есть 16 гигабайт памяти, около 2.7 используется, и к тому времени, когда Excel возвращает это сообщение, у меня все еще остается около 6 гигабайт памяти. Размер после преобразования этого файла составляет от 560 МБ до 1,81 гигабайта, что примерно соответствует размеру строки значений.
Меньшие файлы, такие как 100000 семплов и 256 каналов, открываются нормально и выглядят правильно.
Согласно документации Excel, он должен отображать более 1 миллиона строк и что-то вроде 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?
Любая информация приветствуется.
Задача ещё не решена.