⽂章⽬录
⼀、思路
⽐如现在我有这样⼀个⽂件:⽂件第⼀⾏存储的是字段名,下⾯存的都是数据,将这样⼀个⽂件读到⼀个结构体中的思路如下:取第⼀⾏,保存各个字段名称到⼀个元胞数组中 ⽤eval根据第⼀⾏的字段构造结构体,
下⾯的代码是可以跑通的
a.name=1
a.sex=2
中国少年先锋队章程
a(2).name=1
本来并不存在a,代码第⼀⾏⽣成了a并在a中添加了字段name,代码第⼆⾏在a中添加了字段sex,第三⾏将结构体a升级成了结构体数组,并向结构体数组a中添加了第⼆个元素,将其name字段值设定为1。
a.name指的是a这个结构体数组第⼀元素的name字段,并不是a所有元素的name字段,得到的是⼀个值,⽽不是⼀个数组。
⼆、实现
% get struct from clkdif file
function stu=read_dif(file)
街头三维立体画fid=fopen(file,'r');
str = fgetl(fid);人因工程
S = regexp(str, '\s+', 'split'); %field
n=length(S);
j=1;
while ~feof(fid)
分片阈值str = fgetl(fid);
str=strtrim(str); %rm the blankSpace on the beg and end
if str(1)=='-'
continue;
end
if str(1:3)=='EOF'
break;
end
tmp = regexp(str, '\s+', 'split');
for i=1:n
eval(['stu(j).',S{i},'=tmp{i};']);
end
j=j+1;
end
fclose(fid);
end
注意:最后得到的是⼀个存放着char类型的元胞矩阵。实际上,⼀般这种整齐的结构可以⽤⼀个⼆维矩阵表⽰(在⽂件内容存放的数据类型都是数据或长度⼀致的char类型时),只有在迫不得已的情况下才考虑⽤这种,因为⽐较费时!
三、调⽤
⽰例⽂件:
制定和制订的区别name sex age hobby
aa man 4 8
ab wom 5 9
bb wom 6 10
cc man 7 11
调⽤:
clc;clear;
file='C:\Users\OHanlon\'; tic;
stu=read_dif(file);
toc;