2016-08-29 3 views
1

데이터가있는 텍스트 파일이 여러 개 있고 각 파일의 특정 부분 (시간 정보)을 읽고 싶습니다.이 파일은 항상 첫 번째 파일의 끝에 있습니다 각 파일의 행. 다음은 그 예입니다 :Matlab (textscan), 지정된 열과 행의 문자 읽기

%termo2, 30-Jan-2016 12:27:20 

즉. "12:27:20"을 받고 싶습니다.

비슷한 문제에 대해 이전에 사용한 textscan을 사용해 보았습니다. 나는이 행의 3 개의 열과 단락 문자로 된 하나의 공백이 있다고 생각했다.

내가 먼저 (%s) 문자열로 다음을 지정하려고 :

time = textscan(fid,'%s %{dd-MMM-yyyy}D %{HH:mm:ss}D') 

이 두 그냥 빈을 생산 :

fid = fopen(fname); 
time = textscan(fid,'%s %s %s'); 

나는 또한 날짜 형식을 사용하여 날짜와 시간을 지정하려 세포. (나는 같은 결과로 구분 기호를 ''와 같이 정의하는 등 많은 변형을 시도했다.)

어떤 도움을 주셔서 감사합니다!

가 여기에 전체 파일이다 (여기서하지 않도록 붙여 넣기이 작업을 수행하려면 올바른 방법입니다 - 내가 MATLAB과 유래 모두 새로운 해요 ..) :

%termo2, 30-Jan-2016 12:27:20 

% 
%102 
% 

%stimkod stimtyp 
%  1 Next:Pain 
%  2 Next:Brush 
% vaskod text 
%  1  Obeh -> Beh 
%  2  Inte alls intensiv -> Mycket intensiv 

% stimnr starttid  stimkod  vaskod VASstart  VASmark   VAS 
     1  78.470   2   1  96.470  100.708  6.912 
     1  78.470   2   2  96.470  104.739  2.763 
     2  138.822   1   2  156.821  162.619  7.615 
     2  138.822   1   1  156.821  166.659  2.496 
     3  199.117   2   2  217.116  222.978  2.897 
     3  199.117   2   1  217.116  224.795  5.773 
     4  258.612   2   1  276.612  280.419  5.395 
     4  258.612   2   2  276.612  284.145  4.622 
     5  320.068   1   1  338.068  340.689  4.396 
     5  320.068   1   2  338.068  346.090  2.722 
     6  377.348   1   2  395.347  398.809  6.336 
     6  377.348   1   1  395.347  404.465  3.391 
     7  443.707   2   1  461.707  464.840  6.604 
     7  443.707   2   2  461.707  473.703  3.652 
     8  503.122   1   2  521.122  526.009  4.285 
     8  503.122   1   1  521.122  529.808  3.646 
     9  568.546   2   2  586.546  586.546  5.000 
     9  568.546   2   1  586.546  595.496  6.412 
     10  629.953   2   1  647.953  650.304  7.034 
     10  629.953   2   2  647.953  655.600  6.615 
     11  694.305   1   1  712.305  714.416  4.669 
     11  694.305   1   2  712.305  721.079  2.478 
     12  751.537   2   2  769.537  773.511  7.307 
     12  751.537   2   1  769.537  777.423  8.225 
     13  813.944   1   2  831.944  834.958  7.731 
     13  813.944   1   1  831.944  839.255  1.363 
     14  872.448   2   1  890.448  893.829  6.813 
     14  872.448   2   2  890.448  899.439  2.600 
     15  939.880   1   2  957.880  963.811  4.332 
     15  939.880   1   1  957.880  966.603  2.786 
     16  998.328   2   1 1016.327 1020.707  5.837 
     16  998.328   2   2 1016.327 1025.275  2.664 
     17 1062.911   1   2 1080.910 1082.967  2.792 
     17 1062.911   1   1 1080.910 1088.674  4.094 
     18 1125.182   1   1 1143.182 1144.379  0.619 
     18 1125.182   1   2 1143.182 1151.786  8.992 

답변

2

는 전체 읽기하지 않는 경우 파일의 경우, fgetl을 사용하여 첫 번째 행을 읽고 (regexp을 사용하여) 문자열을 분할 한 다음 마지막 요소를 가져올 수 있습니다.

parts = regexp(fgetl(fid), '\s+', 'split'); 
last = parts{end}; 

말했다되고 있다는 파일은 당신이 말하는 방법 실제로 경우 textscan를 사용하는 방식에 문제가 아무것도 할 수없는 것 같다. 또한,

parts = textscan(fid, '%s', 3); 
last = parts{end} 

업데이트

는 파일의 상단에서 시작하도록 파일을 구문 분석하기 전에 frewind을 사용하여 파일 포인터를 되감기해야합니다 : 당신은 번갈아처럼 뭔가를 할 수 있습니다.

frewind(fid) 
+0

응답 해 주셔서 감사합니다. Regexp와 fgetl을 가지고 놀아 보았지만 작동시키지 못했습니다. 결국, 쉘 (awk)에서 이것을했습니다. 유닉스에서 작업하는 데 익숙해 졌기 때문에 더 쉬웠습니다 (하지만 'm 학습 MATLAB, 그래서 이것은 여전히 ​​유용했다) – Neuroguy

+0

@ Neuroguy 당신은 실제 파일을 게시 할 수 있습니까? 분명히 그것이 당신이 생각하는 것이 아닙니다. – Suever

+0

파일에 붙여 넣었지만 어떤 이유로 줄 바꿈 중 일부가 누락되어 다른 모양으로 나타납니다. 어쨌든 지금은 맨 위 행에만 관심이 있습니다. 아마도 여기에 대한 지불이 있습니다. 실제 파일을 여기에 업로드 하시겠습니까? – Neuroguy

관련 문제