MATLAB Language                
            Чтение больших файлов
        
        
            
    Поиск…
TextScan
Предположим, что вы форматировали данные в большом текстовом файле или строке, например
Data,2015-09-16,15:41:52;781,780.000000,0.0034,2.2345
Data,2015-09-16,15:41:52;791,790.000000,0.1255,96.5948
Data,2015-09-16,15:41:52;801,800.000000,1.5123,0.0043
 можно использовать textscan чтобы прочитать это довольно быстро. Для этого нужно получить идентификатор файла текстового файла с помощью функции fopen : 
fid = fopen('path/to/myfile');
Предположим, что для данных в этом примере мы хотим игнорировать первый столбец «Данные», читать дату и время в виде строк и читать остальные столбцы как удвоенные, т. Е.
 Data  ,  2015-09-16  , 15:41:52;801  , 800.000000  , 1.5123  ,  0.0043
ignore      string         string         double      double     double
Для этого позвоните:
data = textscan(fid,'%*s %s %s %f %f %f','Delimiter',',');
 Звездочка в %*s означает «игнорировать этот столбец». %s означает «интерпретировать как строку». %f означает «интерпретировать как удваивает (плавает)». Наконец, 'Delimiter',',' указывает, что все запятые должны интерпретироваться как разделитель между каждым столбцом. 
Подводить итоги:
fid = fopen('path/to/myfile');
data = textscan(fid,'%*s %s %s %f %f %f','Delimiter',',');
 теперь data содержат массив ячеек с каждым столбцом в ячейке. 
Строки даты и времени для числового массива быстро
 Преобразование строк даты и времени в числовые массивы можно выполнять с помощью datenum , хотя это может занять половину времени при чтении большого файла данных. 
Рассмотрим данные в примере Textscan . Кроме того, используя textscan и интерпретируя дату и время как целые числа, они могут быть быстро преобразованы в числовой массив.
Т.е. строка в данных примера будет интерпретироваться как:
 Data , 2015  - 09  -  16  ,  15  :  41  :  52  ;  801 , 800.000000 , 1.5123 , 0.0043
ignore double double double double double double double    double     double   double
который будет читаться так:
fid = fopen('path/to/myfile');
data = textscan(fid,'%*s %f %f %f %f %f %f %f %f %f %f','Delimiter',',-:;');
fclose(fid);
Сейчас:
y = data{1};          % year
m = data{2};          % month
d = data{3};          % day
H = data{4};          % hours
M = data{5};          % minutes
S = data{6};          % seconds
F = data{7};          % milliseconds
% Translation from month to days
ms = [0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; 
n = length(y);        % Number of elements
Time = zeros(n,1);    % Declare numeric time array
% Algorithm for calculating numeric time array
for k = 1:n
    Time(k) = y(k)*365 + ms(m(k)) + d(k) + floor(y(k)/4)...
              - floor(y(k)/100) + floor(y(k)/400) + (mod(y(k),4)~=0)...
              - (mod(y(k),100)~=0) + (mod(y(k),400)~=0)...
              + (H(k)*3600 + M(k)*60 + S(k) + F(k)/1000)/86400 + 1;
end
 Использование datenum на 566 678 элементах потребовало 6626570 секунд, тогда как для метода выше требовалось 0,043434 секунды, т.е. 0,73% времени для datenum или ~ 137 раз быстрее.