如何将此文本文件转换为MATLAB中的列表?
问题描述:
我有一个文本文件,并想将其导入到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]
这看起来非常简单,但我一直有这个麻烦至今。我可能会忽略一些东西。任何人有任何想法或建议?
答
有很多方法可以做到这一点。假设有应该是在数据文件中的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
上面使用的功能RESHAPE,CELLFUN,STR2DOUBLE,和CELL2STRUCT。
答
创建一个“人”的结构域“名称”,“品位”和“时代”
然后结合regexp
使用fgetl
几乎完全一样你以前的有关基因的问题。
“age”应该在数据文件中和'='之间有一个空格吗? – gnovice 2010-06-15 19:11:00