3

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

这似乎很简单,但到目前为止我一直遇到麻烦。我可能忽略了一些东西。有人有什么想法或建议吗?

4

2 回答 2

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

以上使用函数RESHAPECELLFUNSTR2DOUBLECELL2STRUCT

于 2010-06-15T19:33:44.787 回答
3

创建一个包含“姓名”、“等级”和“年龄”字段的“人员”结构

然后fgetl结合使用regexp几乎与您之前关于基因的问题一样。

于 2010-06-15T18:56:28.667 回答