2012-03-01 3 views
0

.txt 파일에서 데이터를 읽으려고합니다. 샘플 데이터는 아래에 나와 있습니다. M-N 행 번호를 읽는 알고리즘이 필요합니다. while/for 루프를 사용할 수는 있지만 매우 느려질 수 있습니다. 감사!txt 파일에서 'm-to-n'행 번호 읽기 (MATLAB)

a=[ 1 6 11 16 ; 
    2 7 12 17 ; 
    3 8 13 18 ; 
    4 9 14 19 ; 
    5 10 15 20] ; % data is in Test.txt --> 
         % fid = fopen('Test.txt'); 
         % a=a.'; fprintf(fid, '%.3f\t%.3f\t%.3f\t%.3f\r\n', a(:)) ; 

fid = fopen('Test.txt') ; 
AnsMat = fscanf(fid, '%f %f %f %f') 

AnsMat = [2 7 12 17 ; 3 8 13 18] ; % Read row-numbers 2 to 4 this time 

답변

3

당신은 많은 라인을 건너 뛰는 방법 HeaderLines 매개 변수 텔링의 MATLAB을 허용 textscan을 시도 할 수 있습니다. 예 라인을 읽을

N (= 2) m에 (= 4), 당신은 할 수 : 그래서 당신이 그것을 변환해야하지만

fid = fopen('Test.txt'); 
C = textscan(fid,'%f %f %f %f\n',m-n+1,'HeaderLines',n-1); 
fclose(fid); 

이 셀 배열로 데이터를 반환 않습니다

경우, 분명히

text=csvread('yourfile.csv',1,1,[1 1 m n]) 

: 데이터 대신 텍스트 형식의 CSV 형식 인 경우

AnsMat = cell2mat(C); 
+0

안녕하세요. 고맙지 만 'm-n + 1'은 데이터 열을 현명하게 가져오고 행을 가져 오지 않으므로 작동하지 않습니다. 데이터를 행별로 가져 오는 것이 중요합니다. 다른 접근법을 제안하거나 삭제할 수 있습니까? – Maddy

+0

그런 다음 데이터가 행별로 있어야하는 이유에 대해 설명 할 수 있습니까? 'cell2mat'를 사용하면 데이터를 행렬로 변환 한 다음 행 단위 작업을 적용 할 수 있습니다. 그리고 한 번에 하나의 라인 만 읽는다면 (루프라고합니다)'m-n + 1 '대신'n-1'과'1 '을 건너 뛰고 처음으로 한 행을 읽었을 것입니다 '그리고 후속 루프에서는'fscanf' 만 사용할 수 있습니다 (파일 핸들이 현재 관심있는 행을 가리키고 있으므로 더 이상 건너 뛸 필요가 없습니다). –

+0

oops !! 죄송합니다! 나는 a = a를했다. ' 그래서 나는 그것을 잘못 확인하고있었습니다. 정말 고마워. 이것은 내가 필요한 것입니다! – Maddy

0

, 당신은 명령을 사용할 수 있습니다 데이터는 텍스트 형식으로 만 사용할 수 있습니다. textscan 옵션을 사용하는 것처럼 수동으로 변환하는 것도 많은 작업이지만 텍스트 파일이 출력 형식을 제어 할 수있는 다른 곳에서 생성되는 경우이 프로세스를 간소화 할 수 있습니다.

+0

고맙습니다 Prototoast. 현재 파일은 .txt이지만, CSV로 가져온다면 솔루션이 완벽 할 것입니다. – Maddy