Matlab 读取文件内容至结构体中

一、思路

比如现在我有这样一个文件:文件第一行存储的是字段名,下面存的都是数据,将这样一个文件读到一个结构体中的思路如下:

  • 取第一行,保存各个字段名称到一个元胞数组中
  • 用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版权协议,转载请附上原文出处链接和本声明。