当前位置:网站首页>数据处理技巧(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中的数据 应该能解决很多读取数据的问题啦。
边栏推荐
猜你喜欢
Vit paper details
关于char[]数组通过scanf赋值使用上的一些问题。。
Oracle-控制文件及日志文件的管理
Sparkshuffle process and Mr shuffle process
C # réalise la liaison des données du rapport Crystal et l'impression du Code à barres 4
GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
UNI-Admin基础框架怎么关闭创建超级管理员入口?
Powerful domestic API management tool
关于程序员的职业操守,从《匠艺整洁之道》谈起
LeetCode刷题(十一)——顺序刷题51至55
随机推荐
Earned value management EVM detailed explanation and application, example explanation
GPS from getting started to giving up (12), Doppler constant speed
Shell product written examination related
华为在多个行业同时出击,吓人的技术让欧美企业瑟瑟发抖
C#實現水晶報錶綁定數據並實現打印4-條形碼
Kohana 数据库
Why is the cluster mode of spark on Yan better than the client mode
Xiaoman network model & http1-http2 & browser cache
设置状态栏样式Demo
ZABBIX proxy server and ZABBIX SNMP monitoring
经纪xx系统节点VIP案例介绍和深入分析异常
[10:00 public class]: basis and practice of video quality evaluation
Huawei has launched attacks in many industries at the same time, and its frightening technology has made European and American enterprises tremble
GPS from entry to abandonment (XIV), ionospheric delay
MariaDB database management system learning (I) installation diagram
Kohana database
Leveldb source code analysis series - main process
Solve project cross domain problems
小常识:保险中的“保全”是什么?
基于LM317的可调直流电源