怎样将文本文件转换为MATLAB列表?

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]

这似乎非常简单,但我迄今为止一直在遇到问题。可能是我忽略了什么。有人有什么想法或建议吗?


数据文件中age和等号之间是否应该有空格? - gnovice
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

接下来,您可以按照以下方式处理数据,创建一个具有字段'name''grade''age'的3×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

3
创建一个“人”结构,其字段包括“姓名”,“年级”和“年龄”。
然后使用fgetlregexp的组合,几乎与您之前关于基因的问题完全相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接