수색…


텍스트 스캔

큰 텍스트 파일이나 문자열로 데이터를 포맷했다고 가정합니다.

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 배 빠른 속도로 나.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow