捣鼓了许久,终于达到了自己想要的效果,现记录一下!
一、背景:
使用单片机的串口调试助手导出的txt文件,里面含有字符串,并且测试了很多组,一个个处理起来很麻烦,写一个matlab程序可以一次性将多个txt里面的数据提出来,就很nice!
下面是txt文档里面的数据,我们只想要里面的数字!
R=328 G=1902 B=6406 C=8762
R=328 G=1902 B=6406 C=8762
R=329 G=1902 B=6407 C=8764
R=329 G=1902 B=6407 C=8764
R=329 G=1902 B=6407 C=8764
R=329 G=1902 B=6408 C=8765
R=329 G=1902 B=6408 C=8765
R=329 G=1902 B=6408 C=8765
R=329 G=1902 B=6408 C=8765
R=329 G=1902 B=6408 C=8765
R=329 G=1902 B=6407 C=8764
R=329 G=1902 B=6407 C=8764
R=329 G=1902 B=6407 C=8764
我们还有这么多的txt文档!
二、代码
废话不多说,直接上代码吧!会用上函数的调用
clear
close all
Path = 'D:\03_Min_issues\G1\'; % 设置数据存放的文件夹路径
File = dir(fullfile(Path,'*.txt')); % 显示文件夹下所有符合后缀名为.txt文件的完整信息
Excel_name = 'G.xlsx'; %保存到excel文件名
Length_Names = size(File,1); % 获取所提取数据文件的个数
for k = 1 : Length_Names
Lum_FileName=File(k).name; %获取文件名
c = read_txt(Lum_FileName); % 跳转函数read_txt,读取txt文件中的数据
Sheet_page = k;
writematrix(c,Sheet_name,'Sheet',Sheet_page); %分别保存到多个sheet表中
end
被调用的函数:read_txt.m
function c = read_txt(FileLoc)
%UNTITLED2 read the 'txt':The number inside the string
% enter a value:' FileLoc' is filename;
% Return value: 'c' ,the data type is double;
%
datafid=fopen(FileLoc,'r'); %open FileLoc
Freq=[]; % Create an empty array
while ~feof(datafid) %Read to the end of the file
tline=fgetl(datafid);
if strncmp(tline,'R',1) %如果这一行开头的第一个字符和'R'匹配则
freq=regexp(tline,'\d*\.?\d*','match'); %提取这一行的浮点数
Freq=[Freq freq];
end
end
Freq=cellfun(@str2num,Freq); %元胞中的字符串转数字
b=reshape(Freq,4,[]); %一行数据转为二维矩阵
c=b'; %转置成n行4列的矩阵,这个才是我们需要的数据
end
三、结果
得到的结果如下:
ABCD列的数据分别为RGBC的数据,一共有17个sheet表,按照顺序依次排开,注意:文档的命名规则尽量按照matalb的读取规则来,这样你的sheet也会跟着顺序来