2010-06-15 98 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 2010-06-15 19:11:00

回答

5

有很多方法可以做到这一点。假设有应该是在数据文件中的age=(像其他领域)之间的空间,你可以使用TEXTSCAN

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 

然后,你可以处理数据以下列方式来创建一个3 ×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 

上面使用的功能RESHAPECELLFUNSTR2DOUBLE,和CELL2STRUCT

3

创建一个“人”的结构域“名称”,“品位”和“时代”

然后结合regexp使用fgetl几乎完全一样你以前的有关基因的问题。