当前位置:网站首页>数据处理技巧(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中的数据 应该能解决很多读取数据的问题啦。
边栏推荐
- Classic sql50 questions
- 【sdx62】WCN685X将bdwlan.bin和bdwlan.txt相互转化操作方法
- GPS从入门到放弃(十四)、电离层延时
- [sciter]: encapsulate the notification bar component based on sciter
- Codeforces Round #274 (Div. 2) –A Expression
- 小常识:保险中的“保全”是什么?
- Shell product written examination related
- 美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
- Codeforces Round #274 (Div. 2) –A Expression
- Persistence / caching of RDD in spark
猜你喜欢
Xiaoman network model & http1-http2 & browser cache
Common sense: what is "preservation" in insurance?
【MySQL】Online DDL详解
[Chongqing Guangdong education] Information Literacy of Sichuan Normal University: a new engine for efficiency improvement and lifelong learning reference materials
GPS从入门到放弃(十七) 、对流层延时
MPLS experiment
Make menuconfig has a recipe for target 'menuconfig' failed error
GPS from entry to abandonment (XVII), tropospheric delay
BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用
Search element topic (DFS)
随机推荐
MongoDB(三)——CRUD
What is the difference between animators and animators- What is the difference between an Animator and an Animation?
Set status bar style demo
Record the process of cleaning up mining viruses
GPS from getting started to giving up (XI), differential GPS
【sciter】: 基于 sciter 封装通知栏组件
What is the RDD operator in spark
Management background --1 Create classification
Yyds dry goods inventory C language recursive implementation of Hanoi Tower
AI enterprise multi cloud storage architecture practice | Shenzhen potential technology sharing
[MySQL] online DDL details
Kohana database
Reptile practice (V): climbing watercress top250
Huawei has launched attacks in many industries at the same time, and its frightening technology has made European and American enterprises tremble
LeetCode学习记录(从新手村出发之杀不出新手村)----1
Checkpoint of RDD in spark
PostgreSQL modifies the password of the database user
[sciter]: encapsulate the notification bar component based on sciter
搜素专题(DFS )
GNN,请你的网络层数再深一点~