У меня есть файлы (> 100), каждый из которых содержит записанные наборы данных, например:
- файл0: [нет. наборов данных в файле, шт. точек данных для записи1, связанных данных для записи1, нет. точек данных для записи2, связанных данных для записи2, ..., нет. точек данных для записиM, связанных данных для записиM]
- файл1: [нет. наборов данных в файле, ...] (то же, что и выше)
Все данные вместе могут превышать 20 ГБ, поэтому загружать их все в память нельзя. Следовательно, я хотел бы создать файлы с отображением памяти для каждого из файлов, НО скрывая от «пользователя» сложность базовых данных, например, я хотел бы иметь возможность работать с такими данными:
for i=1:TotalNumberOfRecordings
recording(i) = recording(i) * 10; % some stupid data operation
% or even more advanced better:
recording(i).relatedData = 2000;
end
Таким образом, независимо от того, находится ли recording(i)
в файле 0, файле 1 или каком-либо другом файле, и независимо от его положения в файле, у меня есть список, который позволяет мне получить доступ к связанным данным через карту памяти.
То, что у меня есть до сих пор, это список всех файлов в определенном каталоге, теперь моя идея заключалась в том, чтобы просто создать такой список:
entry1: [memoryMappedFileHandle, dataRangeOfRecording]
entry2: [memoryMappedFileHandle, dataRangeOfRecording]
А затем используйте этот список для дальнейшего абстрагирования файлов и записей. Я начал с этого кода:
fileList = getAllFiles(directoryName);
list = []; n = 0;
for file = 1:length(fileList);
m = memmapfile(fileList(file));
for numberOfTracesInFile
n = n+1;
list = [list; [n, m]];
end
end
Но я получаю ошибку:
Memmapfile objects cannot be concatenated
Я новичок в MATLAB, так что это, вероятно, плохая идея. Как это сделать лучше? Можно ли создать таблицу с отображением памяти, содержащую несколько файлов?