使用MatLab语言批量读取文件夹内所有‘.txt’格式文件并做数据处理

一、问题描述

本人是非计算机相关专业的科学研究人员,在我的研究过程中往往需要对大量的数据做处理,如果手工处理不仅效率极低,而且还容易产生人为误差。因此,使用MatLab语言编程,批量读取并处理数据,最终生成需要的数据矩阵是非常有效的方法。在现阶段的研究中,我需要完成以下几项工作:

任务一:将压力传感器采集的压力数据导出,软件导出的文件为‘.txt’格式,并且表头为字符串,如图1所示;

任务二:提取导出文件中的纯数值信息,即32阶矩阵,并对矩阵分割为上下等分的两个16×32矩阵,并提取二者的最大值、平均值;

任务三:将提取的特征值构造成向量,并将整个文件夹内所有‘.txt’文件提取的向量构造成矩阵,作为后续研究的基础。

图1 压力传感器导出的压力信息文件

 

二、编写代码

本代码主要完成三个内容,即

(1)读取'.txt'格式文件中的纯数值矩阵;

(2)数据数据;

(3)生成矩阵;

本代码以读取一个文件夹内的文件为例,考虑到文件命名不规则,且有多个.txt文件,因此使用dir(fullfile(filename),'*.txt'))和for循环。整体代码如下,各语句的功能后加了注释:

clear all;clc;close all
%% 寻找文件夹下的文件所有格式为'.txt',文件信息存放在结构体listPressFiles中,然后对listPressFiles循环
listPressFiles=dir(fullfile('C:\Users\chaoyao\Desktop\ceshi\sittingdata','*.txt'));
% 读取循环变量值
N=length(listPressFiles); %使用'length()'函数读取结构体长度
%% 编写循环体主程序
Pressure_Character_Mat=[]; %建立一个空矩阵
for i=1:N 
    strPressFileName=listPressFiles(i).name;
  strPressPath=strcat('C:\Users\chaoyao\Desktop\ceshi\sittingdata','\',strPressFileName);
    Pressure=importdata(strPressPath,''); % 使用importdata函数读取含有字符串与双精度数值的
    Press_mat=Pressure([3:34],:);
    Pressure_data=str2num(char(Press_mat));
    Pressure_data1=Pressure_data([1:16],:);%读取矩阵的1~16行、所有列元素,赋值给矩阵Pressure_data1
    Pressure_data2=Pressure_data([17:32],:);%读取矩阵的17~32行、所有列元素,赋值给矩阵Pressure_data2
    max(max(Pressure_data1)); %提取矩阵Pressure_data1的最大值
    mean(max(Pressure_data1)) ;%提取矩阵Pressure_data1的平均值
    max(max(Pressure_data2)); %提取矩阵Pressure_data2的最大值
    mean(max(Pressure_data2)); %提取矩阵Pressure_data1的平均值
    Vector_Press_Character=[max(max(Pressure_data1)),max(max(Pressure_data2)),...
        mean(max(Pressure_data1)),mean(max(Pressure_data2))]; % 构造上述四个压力值向量
    Pressure_Character_Mat=[Pressure_Character_Mat;Vector_Press_Character]; % 将行向量放入矩阵,构造压力特征矩阵
end
Pressure_Character_Mat  % 矩阵输出

        

三、结果

代码运行的结果如下图,其变量如图2所示,输出矩阵为27×4的二维矩阵,如图3所示。

图2 变量信息
图3 循环结束输出矩阵

四、小结

1、本程序代码在调试过程中发现很多问题,代码编写结束后,可以设置断点,然后通过步进运行的方式观察工作空间的变量结果以及程序运行状态,这样可发现问题语句的所在,然后再修改问题语句,直到步进运行可以顺利结束。

2、读取含有字符串、数值的混合文本文件,使用importdata()函数,此时读取的结果为元胞数组,然后通过索引的方式读取元胞数组中的数值型矩阵。注意,此时索引出的数值型矩阵是.csv格式的,需要使用str2num(char())函数转化成数值矩阵。

3、最终结果生产一个27×4的矩阵,需要先在循环体外建立一个空矩阵A=[];然后在循环体内构造矩阵A=[A;B];(A、B之间用分号,如果用逗号,将构造成一维矩阵)

 

  • 6
    点赞
  • 66
    收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论 4

打赏作者

人因界的业余程序选手

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值