将txt文件导入Matlab并读取数据

时间:2017-10-30 22:51:14

标签: matlab matrix

我需要将.txt数据文件导入Matlab。该文件已分为3列。每列都有给定变量的特定数字。脚本代码必须能够执行以下操作,

要求

1)将数据从txt导入Matlab

2)如果值超出某个范围,Matlab应该从列中删除值

3)Matlab应该告诉哪一行和哪种类型的错误。

我的方法

我尝试过使用以下方法,

function data = insertData(filename)
filename = input('Insert the name of the file: ', 's');
data = load(filename);

Column1 = data(:,1);
Column2 = data(:,2);
Column3 = data(:,3);

%Ranges for each column
nclm1 = Column1(Column1>0);
nclm2 = Column2(Column2 >= 10 & Column2 <= 100);
nclm3 = Column3(Column3>0);

%Final new data columns within the ranges
final = [nclm1, nclm2, nclm3];

end

问题

上述代码存在以下问题:

1)在用户插入文件名后,Matlab不会将导入的数据保存为“数据”。因此我不知道为什么我的代码错了。

filename =input('Insert the name of the file: ', 's');
    data = load(filename);

2)最后的列没有相同的尺寸,因为我可以看到Matlab独立地从列中删除了值。因此,有一种方法可以让Matlab从矩阵中删除值/行,而不是给定范围的三个“向量”。

1 个答案:

答案 0 :(得分:0)

1)不确定你的意思。我创建了一个示例文本文件,Matlab将数据导入data就好了。但是,您只返回原始未过滤的数据,所以这可能就是您的意思???我修改它以返回原始数据和过滤后的数据。

2)您需要将or错误索引放在一起,以便像这样从每列中删除它们。注意我做了一些其他的编辑...请参阅下面代码中的注释:

function [origData, filteredData]= insertData(filename)
% You pass in filename then overwrite it ... 
% Modified to only prompt if not passed in.
if ~exist('filename','var') || isempty(filename) 
    filename = input('Insert the name of the file: ', 's');        
end
origData = load(filename);

% Ranges check for each column
% Note: return these if you want to know what data was filter for 
% which reason
badIdx1 = origData(:,1) > 0;
badIdx2 = origData(:,2) >= 10 & origData(:,2) <= 100;
badIdx3 = origData(:,3)>0;

totalBad = badIdx1 | badIdx2 | badIdx3;

%Final new data columns within the ranges
filteredData = origData(~totalBad,:);

end

注意:您提到您想知道哪种类型的错误。该信息现在包含在badIDx1,2,3中。因此您可以将它们返回,在屏幕上打印消息,或者显示该信息所需的任何信息。