2013-08-30 2 views
0

일부 헤더와 수치 데이터가있는 큰 텍스트 파일이 있습니다. 난 단지 얻을Matlab에서 textscan을 사용하여 데이터를 출력하십시오.

FID = fopen('datafile.dat'); 
data = textscan(FID,'%f',4,'delimiter',' ','headerLines',4); 
fclose(FID); 

: 나는 헤더 행 특히 출력 데이터 컬럼 2, 4

예 데이터

[headers] 
line1 
line2 
line3 

[data] 
1 2 3 4 
5 6 7 8 
9 10 11 12 

나는 다음과 같은 코드를 사용 해봤를 무시하려는 이 0x1 셀

+0

'[data]'도 헤더이므로'headerLines', 6'이 필요합니다. –

답변

1

의 출력은 다음을 시도

FID = fopen('datafile.dat'); 
data = textscan(FID,'%f %f %f %f', 'headerLines', 6); 
fclose(FID); 
,

data은 1x4 셀 어레이입니다. 각 셀에는 데이터의 각 열에있는 값인 3x1 배열의 double 값이 포함됩니다.

data{2}data{4}을 실행하여 데이터의 두 번째 및 네 번째 열에 액세스 할 수 있습니다. 원래 코드와


은 주요 문제는 데이터 파일이 헤더 라인을 가지고 있지만 당신은 단지 이 있음을 지정한 것입니다.

그러나 formatSpec과 일치하는 횟수 지정 문제가 발생합니다. 당신은 부동 소수점 값 4 번과 일치를 시도하도록 지정 코드

data = textscan(FID,'%f',4);

다음과 같은 예를 들어보십시오. 4 개의 값을 일치시킨 후 textscan이 중지됩니다. 그래서 간단하게하기 위해 들어, 데이터 파일은 데이터 (즉, 헤더 라인), 그 코드를 여러 번 실행할 때 다음 다음과 같은 결과를 얻을 것입니다 포함되어 있다고 가정 해 봅시다 :

>> FID = fopen('datafile_noheaders.dat'); 
>> data_line1 = textscan(FID,'%f', 4) 

data_line1 = 

    [4x1 double] 


>> data_line1{1}' 

ans = 

    1  2  3  4 

>> data_line2 = textscan(FID,'%f', 4) 

data_line2 = 

    [4x1 double] 

>> data_line2{1}' 

ans = 

    5  6  7  8 

>> data_line3 = textscan(FID,'%f', 4) 

data_line3 = 

    [4x1 double] 

>> data_line3{1}' 

ans = 

    9 10 11 12 

>> data_line4 = textscan(FID,'%f', 4) 

data_line4 = 

    [0x1 double] 

>> fclose(FID); 

공지 사항을 그 textscan 추천 그것이 호출 될 때마다 "중단"됩니다. 이 경우 textscan이 호출 된 처음 세 번은 데이터 파일에서 4x1 데이터를 포함하는 셀의 형태로 한 행을 반환합니다. 네 번째 호출은 빈 셀을 반환합니다. 설명 된 사용법에 대해이 형식은 특히 도움이되지 않습니다.

상단에 표시된 예제는 수행하려는 작업에 대해 훨씬 쉽게 작업 할 수있는 형식으로 데이터를 반환해야합니다. 이 경우 각 데이터 행에서 4 개의 부동 소수점 값과 일치하며 더 이상이 패턴과 일치하지 않을 때까지 각 텍스트 행을 계속 사용합니다.