2014-06-12 2 views
2

저는 Matlab을 사용하여 텍스트 파일을 읽으려고합니다. 파일이 형식에 :파일을 읽고 특정 문자열로 시작하는 줄을 건너 뜁니다.

문자열 번호 번호
문자열 번호 번호
....

내가 특정 문자열로 시작하는 줄을 건너 뛸 싶습니다. 다른 문자열의 경우 해당 행에 두 숫자를 저장하고 싶습니다.

+2

실제 데이터가있는 최소 예제를 제공해 주시겠습니까? – kkuilla

답변

5

은의이 샘플 파일 file.txt을 보자 :

badstring 1 2 
badstring 3 4 
goodstring 5 6 
badstring 7 8 
goodstring 9 10 

을 줄이 badstring 우리가 그것을 건너로 시작하면, 그렇지 않으면 우리는 문자열 다음 두 숫자를 저장합니다.

fid = fopen('file.txt'); 
nums = textscan(fid, '%s %f %f'); 
fclose(fid); 
ind = find(strcmp(nums{1},'badstring')); 
nums = cell2mat(nums(:,2:end)); 
nums(ind,:) = []; 
display(nums) 

후, 세포 배열로 전체 파일을 판독 (문자열)없이 행렬로 변환 한 후 원래 badstring 시작 모든 행을 죽일 것이다. 또는 파일이 매우 큰 경우이 반복 솔루션을 사용하여 모든 행을 임시로 저장하지 않아도됩니다.

fid = fopen('file.txt'); 
line = fgetl(fid); 
numbers = []; 
while line ~= -1 % read file until EOF 
    line = textscan(line, '%s %f %f'); 
    if ~strcmp(line{1}, 'badstring') 
     numbers = [numbers; line{2} line{3}]; 
    end 
    line = fgetl(fid); 
end 
fclose(fid); 
display(numbers) 
+0

그래, 해봤지만 메시지 오류 : "std :: exception"예외 메시지가 발생했습니다. 메시지 카탈로그 MATLAB : 서비스가 파일에서로드되지 않았습니다. 파일 위치, 형식 또는 내용을 확인하십시오. – user3733487

+0

이 오류가 샘플 파일에도 발생하는지 테스트 해 주실 수 있습니까? 형식이 정확히 동일하고 파일이 matlab의 현재 작업 디렉토리에 있거나'fopen'을 사용할 때 파일에 대한 전체 상대 경로를 제공하는지 확인하십시오. 그것은 나를 위해 완벽하게 작동합니다. – timgeb

+0

미안하지만 그건 내 잘못이야! 나는 그것을 고쳤다! 감사! – user3733487

관련 문제