如何在MATLAB中将此文本文件转换为列表?

时间:2010-06-15 18:50:09

标签: matlab list file-io text-files matlab-struct

我有一个文本文件,想将其导入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]

这看起来很直接,但到目前为止我一直遇到麻烦。我可能会忽视某些事情。任何人有任何想法或建议吗?

2 个答案:

答案 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

以上使用的功能为RESHAPECELLFUNSTR2DOUBLECELL2STRUCT

答案 1 :(得分:3)

使用字段'name','grade'和'age'

创建一个'person'结构

然后将fgetlregexp结合使用,就像您之前关于基因的问题一样。