使用MATLAB提取“以外的数据”;数据从下一行开始:“quot;在文本文件中
我试图使用Matlab从一个.txt文件中提取4列数据(在这种情况下,使用Matlab是不可协商的);但是,在感兴趣的数据之前有可变数量的标题文本。数据上方的行总是读取使用MATLAB提取“以外的数据”;数据从下一行开始:“quot;在文本文件中,matlab,text,Matlab,Text,我试图使用Matlab从一个.txt文件中提取4列数据(在这种情况下,使用Matlab是不可协商的);但是,在感兴趣的数据之前有可变数量的标题文本。数据上方的行总是读取 Theta(deg)Phi(deg)Amp相位数据从下一行开始: 对于更多上下文,从标题到数据的转换如下所示…: Amp/相位漂移=-1.11 dB,2.7度 θ(度)φ(度)安培相位数据从下一行开始: -180.000 -90.000 16.842 -116.986 -179.000 -90.000 16
Theta(deg)Phi(deg)Amp相位数据从下一行开始:
对于更多上下文,从标题到数据的转换如下所示…:
Amp/相位漂移=-1.11 dB,2.7度
θ(度)φ(度)安培相位数据从下一行开始:
-180.000 -90.000 16.842 -116.986
-179.000 -90.000 16.837 -126.651
-178.000 -90.000 16.549 -137.274
最好的方法是什么?另外,是否有一种方法可以节省时间,只需在前200行文本中搜索短语
数据从下一行开始:
?您始终可以打开文件并循环浏览文件,直到找到数据从下一行开始:
。一旦你到了那里,你就可以把这些值读入矩阵。您可以使用、、和的组合来帮助您做到这一点
大概是这样的:
f = fopen('data.txt', 'r'); %// Replace filename with whatever you're looking at
%// Go through each line in the text file until we find "Data starts on next line"
line = fgetl(f);
while isempty(strfind(line, 'Data starts on next line'))
if line == -1 %// If we reach the end of the file, get out
break;
end
line = fgetl(f);
end
%// File pointer is now advanced to this point. Grab the data
if line ~= -1
data = cell2mat(textscan(f, '%f %f %f %f'));
else
disp('Could not find data to parse');
end
fclose(f); %// Close file
代码本身就说明了问题。但是,为了更详细,让我们逐行地讨论它
第一行打开数据文件进行读取。接下来,我们抓取文本文件的第一行,然后继续从该点开始检查,直到在该行找到“数据从下一行开始”
的实例。我们将此逻辑放在中,而循环和strfind
确定特定模式在某些文本中发生的位置。我们正在搜索的文本是文本文件中查询的行,我们想要的模式是“数据从下一行开始”
。如果找不到要查找的内容,strfind
返回一个空数组,因此我们使用循环,而循环直到strfind
不返回空数组
我已经做了一些额外的检查,如果我们没有找到“数据从下一行开始”
,我们什么也不做。如果到达文件末尾,fgetl
将返回-1。如果我们遇到a-1,这意味着没有需要解析的数据,因此我们将保持原样
如果我们最终找到这个字符串,那么文件指针已经前进到现在有有效数字数据的位置。我们使用textscan
读取超过此点的文本行,并使用四列数据的事实,使用%f
以空格分隔,表示每行有4个浮点数。其结果将为您提供一个4元素单元数组,其中每个元素都是一列数据。要将结果转换为数字数组,需要使用cell2mat
进行此转换。此数据存储在名为data
的变量中。我们最终关闭了该文件,因为我们不再需要使用它了
当我运行上述代码并将示例文本数据放入名为data.txt
的文件时,我得到的是:
>> data
data =
-180.0000 -90.0000 16.8420 -116.9860
-179.0000 -90.0000 16.8370 -126.6510
-178.0000 -90.0000 16.5490 -137.2740
如果可以修改文本文件,只需在前面添加一个%
注释文本文件的非数据部分即可。然后,您可以简单地将该文件加载到matlab中
具体来说:如果您的文件data.txt
包含
% Amp/Phase drift = -1.11 dB, 2.7 deg
%
%
% Theta(deg) Phi(deg) Amp Phase Data starts on next line:
-180.000 -90.000 16.842 -116.986
-179.000 -90.000 16.837 -126.651
-178.000 -90.000 16.549 -137.274
然后matlab将能够处理
data=load('data.txt');
这个变量的内容是
>> data
data =
-180.0000 -90.0000 16.8420 -116.9860
-179.0000 -90.0000 16.8370 -126.6510
-178.0000 -90.0000 16.5490 -137.2740
令人惊叹的!正是我需要的。谢谢你的详尽回答!