当前位置:网站首页>数据处理技巧(7):MATLAB 读取数字字符串混杂的文本文件txt中的数据
数据处理技巧(7):MATLAB 读取数字字符串混杂的文本文件txt中的数据
2022-07-06 14:21:00 【娱乐至上2091】
MATLAB 读取数字字符串混杂的文本文件txt中的数据
目标
分多个数组提取下图文本中的数据


介绍
之前介绍了在txt文本中,内容是以列规整的情况下,可以参考:数据处理技巧(5):MATLAB 读取txt中的数据.上次介绍的主要是处理以下两图,按列排列的情况。

这一次处理是数据比较复杂,直接看本文,每一列不是那么整齐。主要处理三种情况:纯数字、字符+数字、字符+数字+字符+数字的情况。
① 纯数字的情况
需要读取的文本文件:

判断文件路径
判断输入的文本文件路径是否正确,如果输入了一个错误的文件名,会提示“错误信心+文件打开失败。”的提示。

输入了正确的文件路径之后,读取数据结束,会出现“成功读取文件数据”的提示。

matlab 读取数据的结果
打开工作区的 mdata, 双击 mdata 的 data 变量,可以看到读取的纯数字的数据。

由于matlab 的表格默认显示4位小数,所以看起来不同。实际上 matlab 计算不只显示的4位小数,是可以正常计算的。
代码块
%% purenum
% 创建data数组
mdata.data = [];
FileLoc = "purenum.txt"; % 文本文件所在路径,如果在同一文件夹中,只写文件名即可
[datafid,datamess] = fopen(FileLoc,"r"); % 打开文本文件,只读模式打开
if datafid==-1
% 成功打开,返回非负数;打开失败返回-1
disp(datamess);
disp("文件打开失败。");
else
tline = fgets(datafid); % 先读取第一行
while tline~=-1 % 当一行数据为-1,说明文件所有行遍历结束
data123 = sscanf(tline,'%f',3); % 找到点坐标(序号,x,y,z),记得转置
mdata.data=[mdata.data;data123']; % 存储在数组
tline = fgets(datafid); % 迭代,读下一行
end
fclose(datafid); % 关闭文件
disp("成功读取文件数据。"); % 提示
end
② 文字开头,数字在后的情况
需要读取的文本文件

matlab 读取数据的结果

代码块
%% charnum
% 创建三个数组
mdata.VArray = [];
mdata.rgb = [];
mdata.point = [];
FileLoc = "charnum2.txt"; % 文本文件所在路径,如果在同一文件夹中,只写文件名即可
[datafid,datamess] = fopen(FileLoc,"r"); % 打开文本文件,只读模式打开
if datafid==-1
% 成功打开,返回非负数;打开失败返回-1
disp(datamess);
disp("文件打开失败。");
else
tline = fgets(datafid); % 先读取第一行
while tline~=-1 % 当一行数据为-1,说明文件所有行遍历结束
% 判断行开头的第一个单词
[ln,~,~,n] = sscanf(tline,'%s',1); % 处理这一行的数据
if ln=="Vertex"
tline1=tline(n:end); % 截断-删除Vertex
Vxyz = sscanf(tline1,'%f',3); % 找到点坐标(序号,x,y,z),记得转置
mdata.VArray=[mdata.VArray;Vxyz']; % 存储在数组
end
if ln=="rgb"
tline1=tline(n:end); % 截断-删除Vertex
Vxyz = sscanf(tline1,'%f',3); % 找到点坐标(序号,x,y,z),记得转置
mdata.rgb=[mdata.rgb;Vxyz']; % 存储在数组
end
if ln=="point"
tline1=tline(n:end); % 截断-删除Vertex
Vxyz = sscanf(tline1,'%f',3); % 找到点坐标(序号,x,y,z),记得转置
mdata.point=[mdata.point;Vxyz']; % 存储在数组
end
tline = fgets(datafid); % 迭代
end
fclose(datafid); % 关闭文件
disp("成功读取文件数据。"); % 提示
end
③ 一行文字和数字混杂的情况
需要读取的文件:

matlab 读取数据结果:

代码块
%% charnumcharnum
% 创建三个数组
mdata.VArray = [];
mdata.rgb = [];
mdata.point = [];
FileLoc = "charnumcharnum.txt"; % 文本文件所在路径,如果在同一文件夹中,只写文件名即可
[datafid,datamess] = fopen(FileLoc,"r"); % 打开文本文件,只读模式打开
if datafid==-1
% 成功打开,返回非负数;打开失败返回-1
disp(datamess);
disp("文件打开失败。");
else
tline = fgets(datafid); % 先读取第一行
while tline~=-1 % 当一行数据为-1,说明文件所有行遍历结束
% 判断行开头的第一个单词
[ln,~,~,n] = sscanf(tline,'%s',1); % 处理这一行的数据
if ln=="Vertex"
tline1=tline(n:end); % 截断-删除Vertex
Vxyz = sscanf(tline1,'%f',3); % 找到点坐标(序号,x,y,z),记得转置
mdata.VArray=[mdata.VArray;Vxyz']; % 存储在数组
% 找 rgb
k1 = strfind(tline, 'rgb');
if k1>0
k1=k1+3; % 找到删去rgb的最后位置
tline1=tline(k1:end);
rgb = sscanf(tline1,'%f',3); % 找到 rgb
mdata.rgb=[mdata.rgb;rgb']; % 存储在数组里
end
% 找 point
k2 = strfind(tline, 'point');
if k2>0
k2=k2+5; % 找到删去 point 的最后位置
tline2=tline(k2:end);
point = sscanf(tline2,'%f',3); % 找到 point
mdata.point=[mdata.point;point']; % 存储在数组里
end
end
tline = fgets(datafid); % 迭代
end
fclose(datafid); % 关闭文件
disp("成功读取文件数据。"); % 提示
end
结尾
通过这次介绍,可以很快速地用 matlab 提取文本文件中的数据,以备后续 matlab 处理。 结合 数据处理技巧(5):MATLAB 读取txt中的数据 应该能解决很多读取数据的问题啦。
边栏推荐
- HDU 4912 paths on the tree (lca+)
- OpenCV300 CMake生成project在项目过程中的问题
- Qt | UDP广播通信、简单使用案例
- QT | UDP broadcast communication, simple use case
- What can one line of code do?
- BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用
- i.mx6ull搭建boa服务器详解及其中遇到的一些问题
- NPM run dev start project error document is not defined
- MariaDb数据库管理系统的学习(一)安装示意图
- 关于程序员的职业操守,从《匠艺整洁之道》谈起
猜你喜欢

Aggregate function with key in spark

GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)

LeetCode刷题(十一)——顺序刷题51至55
![[Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference](/img/61/976c7d86ab3b2df5f5af3beefbf547.png)
[Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference

The golden age of the U.S. technology industry has ended, and there have been constant lamentations about chip sales and 30000 layoffs

GPS from getting started to giving up (16), satellite clock error and satellite ephemeris error

Barcodex (ActiveX print control) v5.3.0.80 free version

2020 Bioinformatics | GraphDTA: predicting drug target binding affinity with graph neural networks

GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)

AI enterprise multi cloud storage architecture practice | Shenzhen potential technology sharing
随机推荐
小满网络模型&http1-http2 &浏览器缓存
Oracle control file and log file management
Intelligent online customer service system source code Gofly development log - 2 Develop command line applications
QT | UDP broadcast communication, simple use case
插入排序与希尔排序
AI enterprise multi cloud storage architecture practice | Shenzhen potential technology sharing
十二、启动流程
GPS from getting started to giving up (16), satellite clock error and satellite ephemeris error
[Yu Yue education] higher mathematics of Nanchang University (2) reference materials
Reptile practice (V): climbing watercress top250
Classic sql50 questions
AI 企业多云存储架构实践 | 深势科技分享
2022年6月国产数据库大事记-墨天轮
Management background --1 Create classification
MongoDB(三)——CRUD
GPS from entry to abandonment (XVII), tropospheric delay
AI 企业多云存储架构实践 | 深势科技分享
zabbix 代理服务器 与 zabbix-snmp 监控
【sciter】: 基于 sciter 封装通知栏组件
[daily] win10 system setting computer never sleeps