MATLAB常见的读取加载数据文件都是用load 、importdata之类比较多,该类方法多局限于文件数据每一行的列数都是相等的;

但是如果遇到的数据文件前面N行数据是英文或中文,剩下的是列数相等的数据,那这类导入方法有点不行了,例如数据文件长这样:

04e78817af0b5432007d61dcac6eedf8.png

我们要读取的是后面列数相同的浮点型数据,保存在一个矩阵中,需要跳过前面11行数据(这是一个点云文件,pcd格式),代码和结果如下:

TrFid = fopen(TrPath,'r'); % 路径

FormatString='%f %f %f %*[^\n]'; % 读取数据的类型

% 参数依次是 文件、数据类型、读取行数(可选)、跳过前面11行数据、空格为数据分割符

Ctr = textscan(TrFid, FormatString, NUM, 'HeaderLines', 11, 'delimiter', ' ');

Ctr = cell2mat(Ctr); % 转矩阵

fclose(TrFid);

2ce43a4627dcf794f636f4e255e900a6.png

当我们不需要跳过前面的N行数据,只是每一行的列数不一致,需要分开读取每一行并将每一行数据保存在单独的数组中,如数据文件长这样:

5302ab9f44ababb8b49925c89a97b5f8.png

代码和结果如下:

% matlab读取不同列的数据

clc;clear all;

str = 'D:\VS_Files\Lidar\Project2\cloud_point\train_sample\RGB_dataset_pcd\test.txt';

fid = fopen(str);

while ~feof(fid) % 判断有没有到文件结尾

tline = fgetl(fid); % 每读取完一行数据后,自动地位到下一行

a = str2num(tline)

if isempty(tline) % 判断该行是否为空

continue

end

end

fclose(fid);

a1b4c186e1e88b4e9137ea6fc90c22a7.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐