Вопрос по import, matlab, csv, xls – Matlab xlsread обрезает файл после строки 1048576

1

Есть ли другой способ импортирования .csv в формате Excel в Matlab, кроме xlsread (file.csv);

Файл, который у меня есть, содержит 2830082 строк, и xlsread, кажется, имеет ограничение в 1048576 строк при чтении - остальное обрезается.

Файл выглядит так:

Time, Value
12:07:29, -1.13
12:07:29, -7.54
...

Поэтому использование csvread (..) не будет работать из-за формата даты.

Конечно, это займет некоторое время для этого большого файла. Это завершено вообще? Вы можете наблюдать за процессом Matlab в диспетчере задач, чтобы выяснить, зависли ли или нет данные. Praetorian
Это работало для небольших тестовых файлов, таких как брелок. Я остановил его на большом, хотя это заняло некоторое время ... blitzen
Вы могли бы попробовать мойcsvimport функция; никогда не пробовал его на таком большом файле, поэтому мне интересно посмотреть, работает ли он :-) Praetorian
Это работает, просто занимает время :) blitzen

Ваш Ответ

1   ответ
2

что самый быстрый способ считывать большие CSV-файлы в Matlab - отображать их в памяти и анализировать содержимое как одну строку. Попробуйте поиграть с этим примером кода:

fname = 'file.csv';
fstats = dir(fname);
% Map the file as one long character string
m = memmapfile(fname, 'Format', {'uint8' [ 1 fstats.bytes] 'asUint8'});
textdata = char(m.Data(1).asUint8);

% Find the end of each line, and use the line ends to form an index array
row = strfind(textdata, sprintf('\r\n'));
row = [[1; row(1:end-1)'+2] row' - 1];
% Fix-up if there is no \r\n at the end of the last line
if (row(end) < fstats.bytes - 2)
    row = [row; [row(end) + 2, fstats.bytes]];
end
numrows = size(row, 1);
% Create output variables
Time = zeros(numrows, 1);
Value = zeros(numrows, 1);

% Parse each line of the data (I'm ignoring the first line for simplicity)
for RowNum = 2:numrows
    data = textscan(textdata(row(RowNum,1):row(RowNum,2)), '%[^,]%f', 'delimiter', ',');
    Time(RowNum) = datenum(data{:});
    Value(RowNum) = data{2};
end

% Remove the file mapping
clear('m');

Похожие вопросы