当前位置:网站首页>数据处理技巧(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
- Oracle Performance Analysis 3: introduction to tkprof
- Force buckle 575 Divide candy
- GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)
- GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)
- 【10点公开课】:视频质量评价基础与实践
- MPLS experiment
- [Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference
- Management background --1 Create classification
- What a new company needs to practice and pay attention to
猜你喜欢
GPS from entry to abandonment (XIV), ionospheric delay
C # realizes crystal report binding data and printing 4-bar code
20 large visual screens that are highly praised by the boss, with source code templates!
The golden age of the U.S. technology industry has ended, and there have been constant lamentations about chip sales and 30000 layoffs
bat脚本学习(一)
[daily] win10 system setting computer never sleeps
Earned value management EVM detailed explanation and application, example explanation
[10:00 public class]: basis and practice of video quality evaluation
LeetCode:1189. The maximum number of "balloons" -- simple
Vit paper details
随机推荐
插入排序与希尔排序
功能强大的国产Api管理工具
PostgreSQL modifies the password of the database user
美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
GPS从入门到放弃(十三)、接收机自主完好性监测(RAIM)
MySQL related terms
Broadcast variables and accumulators in spark
【sdx62】WCN685X将bdwlan.bin和bdwlan.txt相互转化操作方法
What is the difference between animators and animators- What is the difference between an Animator and an Animation?
Yyds dry goods inventory C language recursive implementation of Hanoi Tower
经纪xx系统节点VIP案例介绍和深入分析异常
GPS from getting started to giving up (12), Doppler constant speed
Make menuconfig has a recipe for target 'menuconfig' failed error
Unity3D学习笔记6——GPU实例化(1)
2020 Bioinformatics | GraphDTA: predicting drug target binding affinity with graph neural networks
[sciter bug] multi line hiding
OpenCV300 CMake生成project在项目过程中的问题
What can one line of code do?
解决项目跨域问题
用aardio写一个旋转验证码标注小工具