最近编了一个labview程序自动读取光功率计的值。一轮测试下来存了180个txt类型的数据文档。一个一个文档用origin数据处理的话太浪费时间了。想起以前本科将txt导入到matlab处理过数据,想着就去网上看看有没有批量处理txt文档的办法。
下面是我通过学习网上他人的经验总结归纳的一个办法,本人很少用matlab,有更优化的编法的话请大家评论区多指教。具体代码可以直接划到最下方
我先说一下我的需求,180个txt文档每个文档对应一个四分之一波片角度,每个文档中有一一对应的线偏振角度和光功率的两类数据。我需要找到光功率方差最小的那几组数据,对应的文档编号就是我实验所需要的四分之一波片角度。
txt文档和具体数据示例
首先需要用到一个函数是dir。他的作用是列出路径文件夹下的所有内容,以结构体数组形式返回信息;可以通过结构体去调用获取某个具体文档的信息,比如文档名,文档大小等;通过 * 可以指定dir读取列出含有特定字符或者特定类型的文件。看一下matlab的官方注释。
dir函数的返回值
dir的指定读取用法
应用到我这里的场景,代码就是 FileList = dir('D:\data\202111216\*.txt');其中D:\data\202111216\ 是路径,*.txt指定列出该路径下的所有.txt文件。后文通过 filename = FileList(k).name在循环中调用得到每个文档的名字,在通过load函数将数据导入进事先准备好的cell元胞数组中。
这里需要在简单介绍下cell数据类型,cell是一个元胞数组,cell中每个元胞都可以包含任意类型的数据,比如文本列表、数组等等。这里我们每个元胞导入了一个txt文档内的数据数组。
cell数据展示
接着在for循环中,就像调用数组数据一样调用cell元胞,只不过对cell需要使用大括号{}。由于引用的数据是一个数组,又可以在大括号{}后面加小括号()调用数组内的元素。具体代码表示y{k}=x{k}(:,2);
由此我单独提取出来了光功率的值(txt中的第二列数据),并通过var函数求得了方差,完成任务。
在此代码基础上,大家可以扩充自己的代码,进行计算、画图、数据拟合等进一步操作。
具体代码如下,谢谢大家!
close all
clear all
clc
FileList = dir('D:\data\202111216\*.txt');
N = size(FileList,1);
x=cell(N,1);
y=cell(N,1);
z=zeros(N,1);
for k = 1:N
% get the file name:
filename = FileList(k).name;
disp(filename)
%在下面插入你对每个文件要执行的脚本:
x{k}=load(['D:\data\202111216\' filename]);
y{k}=x{k}(:,2);
z(k)=var(y{k});
end