2016-04-18 15 views
0

MATLABにインポートするcsvデータファイルがいっぱいのフォルダがあります。インポート関数は、それぞれ同じです。その名前はパターンに従います(例: 'a0-b0.csv'、 'a0-b5.csv'、 'a0-b10.csv'、 'a0-b15.csv' ... 'a2-b0'など多くのcsvファイルをMATLABのテーブルにインポートする方法

すべてをインポートしたいこれらのファイルはすぐに使用できます。私はそれらを含むデータに対応する分かりやすい名前のテーブルとしてそれらをインポートしたいと思います。

filepath = 'file/path/' 
for (a = [0, 2]) 
    for (b = [0:5:50]) 
     filename = strcat(filepath, 'a', num2str(a), '-b', num2str(b), '.csv') 
     varname = strcat('a', num2str(a), '_b', num2str(b)) 
     varname = importfile(filename, startrow, endrow) 
    end 
end 

のようなものをやって

は、私には概念に意味を成していました。

「varname」自体は変数であり、それに含まれる文字列ではないため、これは私がしたいことをしません。私はeval()を示唆している同様の状況に対して多くの回答を見てきましたが、同時にそれに対して徹底的に提唱しました。

eval()には、実装が面倒な副作用があります。誰もがそれを強く嫌うと、それを実装しようと努力する価値があるのか​​どうか疑問に思う。

私はこれを行う方法は他にありません。私はどのように適切な/関連する名前になる配列(推奨代替)を使用して表示されません。

ファイル名に対応する名前を持つMATLABのテーブルに多くのcsvファイルを自動的にインポートする方法についての提案はありますか?


(重複について:私はまだここでの主な課題となっている変数名を対応の自動作成に取り組む質問、見つかっていない)@transversality条件は彼らのコメントで書いたように、あなたは、

+1

テーブルを格納するために 'struct'を使用します。 'eval'を使わないでください。これまであなたがそれを使用しなければならないと感じたら、あなたがしていることを再考する時間。 –

+0

もっと広く言えば、[動的フィールドの参照](http://blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/) – excaza

答えて

0

をあなたにアプローチすることを再考する必要があります。あなたは、再び内のファイルおよびインポートhtemを変更すでにインポートされたデータと.matファイルを作成し、フォルダを再スキャンまたは.matファイルをロードするためにhwtherチェックしようとしている場合

  1. 私は2つのステップをお勧めしたいです。

  2. structクラスまたはcellクラスを使用してデータを格納するかどうかを決定します。

structのためのコードは次のようになります

filepath = 'file/path/';     % define the data folder 
FileNames=dir('filepath\*.csv');   % list all csv. files within filepath 
N=numel(FileNames);       % count the csv files 
DATA(N)=struct('name','','data',[]);  % preallocate DATA 
for (ii=1:N) 
    Temp=regexp(FileNames(ii).name,'\.','split'); % separate file name and abbreviation 
    DATA(ii).name = Temp{1};    % save the file name 
    DATA(ii).data = importfile([filepath,'\',FileNames(ii).name], startrow, endrow); % save the data 
end 

cellのためのコードは次のようになりますあなたがして、適切な行を見つける必要があり、両方のケースで

filepath = 'file/path/';     % define the data folder 
FileNames=dir('filepath\*.csv');   % list all csv. files within filepath 
N=numel(FileNames);       % count the csv files 
DATA=cell(2,N);        % preallocate DATA 
for (ii=1:N) 
    Temp=regexp(FileNames(ii).name,'\.','split'); % separate file name and abbreviation 
    DATA{1,ii} = Temp{1};    % save the file name 
    DATA{2,ii} = importfile([filepath,'\',FileNames(ii).name], startrow, endrow); % save the data 
end 

、例えば、DATA(find(strcmpi(DATA.name,'<name>))).data

cellアプローチを使用してstructを作成することもできます。 cellのコードを実行したとします。

は、その後、あなたが直接Data.Struct.<filename>コマンドを経由してデータにアクセスできるようになります

DataStruct=struct(DATA{:}); 

を命じます。

関連する問題