2014-05-22 106 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