我有一个文本文件,想将其导入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 :(得分: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
然后,您可以按以下方式处理数据,以创建包含字段'name'
,'grade'
和'age'
的3 x 1结构数组:
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,STR2DOUBLE和CELL2STRUCT。
答案 1 :(得分:3)
使用字段'name','grade'和'age'
创建一个'person'结构然后将fgetl
与regexp
结合使用,就像您之前关于基因的问题一样。