2010-06-15 4 views
3

나는 텍스트 파일을 가지고 MATLAB로 가져올하고 그것을 목록하고 싶습니다 :이 텍스트 파일을 MATLAB의 목록으로 만들려면 어떻게해야합니까?

Person1 
name = steven 
grade = 11 
age= 17 

Person2 
name = mike 
grade = 9 
age= 15 

Person3 
name = taylor 
grade = 11 
age= 17 

위의이 같은 몇 백 개 항목이 있습니다. 각 행은 빈 행으로 구분됩니다. 나는 텍스트를 스캔하고 각 빈 줄 사이의 정보를 목록의 항목으로 만들 수 있다고 생각했습니다. 또한 아래 목록과 같은 목록이 있으면 각 사람을 이름으로 검색 할 수 있기를 바랍니다. 이것은 매우 정직 보인다

x = [Person1   Person2  Person3  
    name = steven name = mike name = taylor 
    grade = 11  grade = 9  grade = 11 
    age = 17  age = 15  age = 17] 

하지만 난 지금까지에 문제가되었습니다

내가 좋아하는 뭔가를 원한다. 나는 무엇인가 놓칠지도 모른다. 누구든지 아이디어 나 조언이 있습니까?

+0

'age'는 데이터 파일에서'='와 사이에 공백이 있어야합니까? – gnovice

답변

5

당신이 잠재적으로 이것을 할 수있는 많은 방법이 있습니다. 3을 만들려면 다음과 같은 방법으로

fid = fopen('people.txt','r');   %# Open the data file 
peopleData = textscan(fid,'%s %*s %s'); %# Read 3 columns of strings per row, 
             %# ignoring the middle column 
fclose(fid);        %# Close the data file 

그런 다음 데이터를 처리 할 수있다 : (다른 필드와 같은) 데이터 파일의 age= 사이에 공백이있을 예정이다 가정하면, 당신은 TEXTSCAN 사용할 수 있습니다 그래밍 1 구조체 필드 'name', 'grade'으로 배열하고 'age' :

nFields = 3;          %# Number of fields/person 
fields = peopleData{1}(2:nFields+1);    %# Get the field names 
peopleData = reshape(peopleData{2},nFields+1,[]); %# Reshape the data 
peopleData(1,:) = [];        %# Remove the top row 
peopleData(2:nFields,:) = cellfun(@str2double,... %# Convert strings to numbers 
            peopleData(2:nFields,:),... 
            'UniformOutput',false); 
x = cell2struct(peopleData,fields,1);    %# Put data in a structure 

위의 기능 RESHAPE, CELLFUN, STR2DOUBLECELL2STRUCT을 이용한다.

3

은 그런 유전자에 대한 이전의 질문처럼 거의 정확하게 regexp와 함께 fgetl를 사용 필즈 '이름', '성적'과 '사람'구조와 '나이'를 만듭니다.