2017-10-30 8 views
1

.txtデータファイルをMatlabにインポートする必要があります。ファイルは3列になっています。各列には、特定の変数に固有の番号があります。スクリプトコードは、次の、Matlabにtxtファイルをインポートしてデータを読み込む

要件

1)の値場合列から値を削除する必要のMatlab

2)MATLABにTXTファイルからデータをインポートを行うことができなければなりません特定の範囲外です。

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に3つの 'ベクトル'ではなく行列から値/行を削除させる方法があります。

答えて

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に含まれていますので、返信したり、画面にメッセージを表示したり、その情報を表示するのに必要な情報を表示することができます。

関連する問題