有了这个textscan
,变量allData
看起来像(只有 4 行)这样:
allData =
{4x1 cell} {4x1 cell} [4x1 double]
当所有数据具有相同类型时,您只能textscan
通过选项直接合并到单个单元格数组中。'CollectOutput'
一种可能的解决方法,不幸的是,它将所有数字数据转换为双精度(在您的情况下不是问题),
C = cell(numel(allData{1}),numel(allData));
areCells = cellfun(@iscell,allData);
C(:,areCells) = [allData{areCells}];
C(:,~areCells) = num2cell([allData{~areCells}])
C =
'0' 'device1' [ 3]
'1' 'device2' [33]
'2' 'device3' [ 3]
'3' 'device4' [34]
同样,这样做的缺点是最后一条语句会将所有非单元类型(例如 uint8、char 等)转换为双精度类型。为避免这种可能的转换:
% after copying cell array data (areCells) as above, but before ~areCells data
Cn = arrayfun(@(ii)num2cell(allData{ii}),find(~areCells),'uni',0);
C(:,~areCells) = [Cn{:}];