一、思路
比如现在我有这样一个文件:文件第一行存储的是字段名,下面存的都是数据,将这样一个文件读到一个结构体中的思路如下:
- 取第一行,保存各个字段名称到一个元胞数组中
- 用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\Desktop\a.txt';
tic;
stu=read_dif(file);
toc;
版权声明:本文为Gou_Hailong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。