MATLAB Language
대용량 파일 읽기
수색…
텍스트 스캔
큰 텍스트 파일이나 문자열로 데이터를 포맷했다고 가정합니다.
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"를 무시하고 날짜와 시간을 문자열로 읽고 나머지 열을 double로 읽으려고합니다. 즉
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
는 "double as as floats"를 의미합니다. 마지막으로, '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
방법은 위의에 대한 즉, 시간의 0.73 %를 0.048334 초를 필요 동안 566,678 요소는 6.626570 초를 필요 datenum
~ 137 배 빠른 속도로 나.