2016-05-01 20 views
0

私の実験(200+)から大量の.csvファイルがあり、以前は別々に読み込んでいました。面倒な仕事です。matlabワークスペースで変数名のセル配列から文字列を取り出す

co_15 = csvread('CO_15K.csv',5,0); 
co_25 = csvread('CO_25K.csv',5,0); 
co2_15 = csvread('CO2_15K.csv',5,0); 
co2_80 = csvread('CO2_80K.csv',5,0); 
h2o_15 = csvread('H2O_15K.csv',1,0); 
etc..... 

私はこのように見えるコードの冒頭にセルを作成し、それから自動的に読み込むforループを作成します。

input = {'co_15' 5;'co_25' 5;... 
     'co2_15' 5; 'co2_80' 5;... 
     'h2o_15' 1; 'h2o_140' 1;... 
     'methanol_15' 5;'methanol_120' 5;'methanol_140' 5;... 
     'ethanol_15' 5;'ethanol_80' 1;'ethanol_140' 5;... 
     'co2_ethanol_15' 5 ;'co2_ethanol_80' 5;... 
     'h2o_ethanol_15' 1 ;'h2o_ethanol_140' 1;... 
     'methanol_ethanol_15' 5;'methanol_ethanol_120' 5;'methanol_ethanol_140' 5}; 

for n = 1:size(input,1) 
    input{n,1} = csvread(strcat(input{n,1},'k.csv'),input{n,2},0); 
end 

このコードでは、セルが19行2列で、行は、すべてのファイルがあり、列は、データを処理するためのパラメータが含まれています。今私が解決策を見つけることができない問題は、私の最初の列が文字列名であり、その文字列名をcsvreadがデータを書き込む変数の名前にしたいのですが、今設定した方法で上書きしますcsvデータを持つセルの最初の列の文字列。私のMATLABワークスペースには、私のcsvファイルのデータを含む最初の列に文字列名を持つ変数が必要です。これをどうすれば解決できますか?

答えて

2

実際にはしたいと思います。 Even the Mathworks will tellあなたはnot to do thisです。このような関連データを追跡するために変数名を使用しようとする場合は、が常にで、データを保持するデータ構造がより優れています。

一つの方法は、セル配列

data = cell(size(input(:,1))); 
for n = 1:size(input,1) 
    data{n} = csvread(strcat(input{n,1},'k.csv'),input{n,2},0); 
end 

は、もう一つの良いオプションはstructを使用することである持っているだろう。あなたのデータに対応する動的フィールド名を持つ単一のstructを持つことができます。

data = struct(); 
for n = 1:size(input,1) 
    data.(input{n,1}) = csvread(strcat(input{n,1},'k.csv'),input{n,2},0); 
end 

それとも実際に構造体の配列を作成し、構造体の中に名前データの両方を保持します。

for n = 1:size(input, 1) 
    data(n).name = input{n,1}; 
    data(n).data = csvread(strcat(input{n,1},'k.csv'),input{n,2},0); 
end 

あなたはabsolutly(再び、それはあまりお勧めないあります)これを行うことを主張した場合、あなたはevalを使用してそれを行うことができます:

for n = 1:size(input, 1) 
    data = csvread(strcat(input{n,1},'k.csv'),input{n,2},0); 
    eval([input{n, 1}, '= data;']); 
end 
+0

そして私は実際にこれを行うにはしたくない場合?私はそれを働かせることができないので、あなたはeval関数でこれをどうやって行いますか?すごくスタブであることを申し訳ありませんが、私は構造体を使ったことはありませんでした。私はすべてのデータを変更する必要があるようですが、今は時間がありません。 – Terranees

+0

@Terranees私はそれを解決策で更新しました。もう一度、可能であれば最初の3つのアプローチのいずれかを使用してください。 – Suever

+0

ありがとうございます、もう少し時間がある場合は最初の3つのアプローチを見ていきます – Terranees

関連する問題