2014-05-22 103 views
1

我有一個4016 x 4單元,稱爲'totalSalesCell'。前兩列包含文本,其餘兩列是數字。總結和匹配不同大小的單元陣列

1st field CompanyName 
2nd field UniqueID 
3rd field NumberItems 
4th field TotalValue 

在我的代碼中,我有一個循環,每週都會循環上個月 - 即4個循環。

在每個循環中,我的代碼返回一個與totalSalesCell結構相同的單元格,稱爲weeklySalesCell,它通常包含與totalSalesCell不同數量的行。

我需要做兩件事。首先,如果weeklySalesCell包含不在totalSalesCell中的公司,則需要將其添加到totalSalesCell中,我相信下面的代碼將爲我執行此操作。

co_list = unique([totalSalesCell(:, 1); weeklySalesCell (:, 1)]); 
    index = ismember(co_list, totalSalesCell(:, 1)); 
    new_co = co_list(index==0, :); 
    totalSalesCell = [totalSalesCell; new_co]; 

我需要做的,是不確定的去最好的辦法它是然後添加weeklySalesCell數字字段到totalSalesCell的第二件事。如上所述,單元格將有90%的時間有不同的行號,因此不能應用簡單的加法。以下是我希望實現的一個例子。

totalSalesCell    weeklySalesCell     Result 

co_id  sales_value  co_id  sales_value   co_id  sales_value 
23DFG  5     DGH84  3      23DFG  5 
DGH84  6     ABC33  1      DGH84  9 
12345  7     PLM78  4      ABC33  1 
PLM78  4     12345  3      12345  10 
KLH11  11             PLM78  8 
                   KLH11  11 
+0

我假設'sales_value'是'double'值,不是嗎他們? 'co_id'作爲所有'char/text'。 – Divakar

+0

是的,這是正確的 – mHelpMe

+0

如果來自第二個單元格陣列的ABC33行附加在輸出結尾處,即ABC33 1結尾處而不是輸出結果中的第三行,那麼它會好嗎? – Divakar

回答

1

我相信下面的代碼必須採取既要執行的任務的護理 -

[x1,x2] = ismember(totalSalesCell(:,1),weeklySalesCell(:,1)) 
corr_c2 = nonzeros(x1.*x2) 
newval = cell2mat(totalSalesCell(x1,2)) + cell2mat(weeklySalesCell(corr_c2,2)) 

totalSalesCell(x1,2) = num2cell(newval) 
excl_c2 = ~ismember(weeklySalesCell(:,1),totalSalesCell(:,1)) 
out = vertcat(totalSalesCell,weeklySalesCell(excl_c2,:)) %// desired output 

輸出 -

out = 
    '23DFG'  [ 5] 
    'DGH8444' [ 9] 
    '12345'  [10] 
    'PLM78'  [ 8] 
    'KLH11'  [11] 
    'ABC33'  [ 1] 
+0

是正常的!謝謝 – mHelpMe

+0

哈哈你像往常一樣歡迎;) – Divakar