2017-08-07 12 views
0

私の問題を説明するためのサンプルコードを書きました。私はいくつかの操作をしています。それぞれの操作は、別々のサーバーによって独立して実行されます(例のように4つだけでなく、それ以上)。私はしたい...Matlabで個別に作成された文字列、数字、ベクトルの名前と連結を自動化

1)私はより多くの年、年の年と植物の種類(例えば、変数の名前を "string200811"年= 2008年のようにすることができるように、 PartOfYear = 1、PlantType = 1など)

2)連結も自動化します(以下のコードの連結のように)。

不明な点がある場合は教えてください。

% Operation 1 
Year = 2008; 
PartOfYear = 1; 
PlantType = 1; 
string200811 = 'blabla'; % some random result 
number200811 = rand(1); % some other random result 
vector200811 = [rand(1); rand(1); rand(1); rand(1)]; % some other random result 

% Operation 2 
Year = 2008; 
PartOfYear = 1; 
PlantType = 2; 
string200812 = 'blablablubb'; 
number200812 = rand(1); 
vector200812 = [rand(1); rand(1); rand(1); rand(1)]; 

% Operation 3 
Year = 2008; 
PartOfYear = 2; 
PlantType = 1; 
string200821 = 'blablabla'; 
number200821 = rand(1); 
vector200821 = [rand(1); rand(1); rand(1); rand(1)]; 

% Operation 4 
Year = 2008; 
PartOfYear = 2; 
PlantType = 2; 
string200822 = 'blablablablubb'; 
number200822 = rand(1); 
vector200822 = [rand(1); rand(1); rand(1); rand(1)]; 

% Concatenate results 
Results = {2008, 1, 1, string200811, number200811;... 
      2008, 1, 2, string200812, number200812;... 
      2008, 2, 1, string200821, number200821;... 
      2008, 2, 2, string200822, number200822} 
Table = cell2table(Results); 
writetable(Table,'ResultsTest.xls','Sheet',1); 

vectors = vertcat(vector200811, vector200812, vector200821, vector200822) 

答えて

2

各「操作」をどのように初期化して結果を保存するかは不明です。構造体またはセル配列オブジェクトを返してください。構造体を生成する


機能:

% Operation x 
function myStruct = createStruct() 
    % ... other functionality here which actually generates the data values 
    myStruct.Year = 2008; 
    myStruct.PartOfYear = 2; 
    myStruct.PlantType = 2; 
    myStruct.String = 'randomstring'; 
    myStruct.Number = 0.5; 
    myStruct.Vector = 1:4; 
end 

が、あなたはいくつかのcreateCellArray機能をcreateStruct機能を置き換えることができ、セルアレイ

% Generate structs and store in a cell array 
myCellArray = cell(4,5); 
myVectors = zeros(4,4); 
for ii = 1:4 
    tempStruct = createStruct(); 
    myCellArray{ii, 1} = tempStruct.Year; 
    myCellArray{ii, 2} = tempStruct.PartOfYear; 
    myCellArray{ii, 3} = tempStruct.PlantType; 
    myCellArray{ii, 4} = tempStruct.String; 
    myCellArray{ii, 5} = tempStruct.Number; 
    myVectors(ii,:) = tempStruct.Vector; 
end 

に構造体のすべてを置きます同様の性質のものである。これはショートカットでループ内の個々のフィールドを割り当てる必要がありますが、実際のデータがより複雑な場合(トラックを保持するフィールドが増えている場合)はあまり明確にならないことがあります。


一般的に、変数には自動的に名前を付けるのは悪い考えです。あなたは(例えば、eval関数を使って)それを行うことができますが、それはぎこちなく、遅く、デバッグの問題とユーザーが変数のトラックを失うことを求めています。一般的な構造体やセル配列に物を格納することは、使いやすさとメンテナンスの方がはるかに優れています。