MATLAB批量读取.txt文件

一、功能概述

本文叙述的程序功能是批量读取某个文件夹中以空格为间隔符的数据,数据为16进制,但是有些特殊,比如原数据是0x12345678,但是.txt文件中为0x78563412,本程序可将.txt文件中的数据转换成原数据然后转换成十进制并绘图,当然如果有其他需要,可以自行修改。

在开发过程中有时需要利用MATLAB将导出的数据绘制成图形,为了使绘图更加高效方便,编写了一个MATLAB程序,主要有以下功能:
1) 能够将文件夹路径下所有.txt文件的图形绘制在一起;
2) 能够统一给每一条波形添加图例;
3) 能够控制是否需要生成.mat文件;
除了上述的功能外,该绘图程序也有限制,在绘制图形时只能绘制相同长度的.txt文件,对于不同长度的.txt文件,该程序只能正常绘制第一个.txt文件。后续如果有需要同时绘制不同长度的.txt文件的需求会对程序进行修改。

二、使用说明

1、修改文件夹路径

在使用时首先要确定需要绘制的.txt文件所在文件夹路径,然后写入到程序中,具体位置如图所示。
修改文件路径

2、添加图例

在使用时首先要确定需要绘制的.txt文件所在文件夹路径,然后写入到程序中,具体位置如图所示。
添加图例
如果不需要添加图例,可以直接将该行注释掉,如果需要添加图例还需要注意的是在运行时会出现警告,如图所示,但是不会影响正常使用。
警告

3、将转化结果存储成.mat文件

使用时需要填入文件存储路径,当同一路径下已经存在一个同名的.mat文件时程序会报错,需要将之前存储的同名文件重命名或者删除,或者更换一个新的存储路径,填写存储路径的位置如图所示。
将转化结果存储为.mat

4、其他注意事项

该程序的第一行为clear all,会清除当前工作区的所有变量内容,如果当前工作区存在比较重要的内容而且未保存,要注意运行时将第一行的clear all注释掉。

三、程序源码

clear all;   % 该行会清除工作区变量,如果不需要清除请将该行注释

file = dir("D:\培训相关\培训作业\meter");   % 扫描该文件夹中的所有子文件
% 注意:前两个是无意义的
subfile_Num=length(file);   % 获取子文件总数(前两个无效)

for i = 3 : subfile_Num
%*******************************数据读取**********************************%
    subfile = fullfile(file(i).folder,file(i).name);   % 拼出第一个子文件路径
    subfileID = fopen(subfile);   % 打开一个子文件
    dataraw_cell(i-2) = textscan(subfileID,'%s');   % 以空格为标识提取数据
    data_raw = dataraw_cell{
    
    1,i-2}';   % 取cell中第1行第i-2列矩阵并转置
    fclose(subfileID);   % 关闭文件
%*******************************数据处理*******************************
    dataraw_Num = length(data_raw);
    cell_tmp = cell(1,dataraw_Num);
    for j = 1 : floor(length(data_raw))
        cell_tmp{
    
    j} = [data_raw{
    
    j}(7:8),data_raw{
    
    j}(5:6),data_raw{
    
    j}(3:4),data_raw{
    
    j}(1:2)];
    end
    data_dec=hex2dec(cell_tmp);
    data_dec(data_dec>2^31)= mod(data_dec(data_dec>2^31),2^31) - 2^31;
%*******************************数据存储**********************************%
    data_out(:,i-2) = data_dec;
%*******************************绘制波形********
    N = 1 : dataraw_Num;
    figure(1);
    plot(N,data_out(:,i-2),LineWidth=1);
%*******************************添加图例**********************************%
    legend('DECI_SEL=0','DECI_SEL=1','CIC采样率200KHz','CIC采样率100KHz');   % 添加图例
%******************%*********存储为.mat文件**************%%%**************%
    save('D:\培训相关\培训作业\meter\output_data.mat','data_out');
    save('D:\培训相关\培训作业\meter\file_name.mat','file');

猜你喜欢

转载自blog.csdn.net/qq_45217381/article/details/128715677