3

当我尝试将 xlswrite 用于 4X10 左右的元胞数组时,每个元素中都有不同长度的字符串,MATLAB 返回了这个错误:

Error using xlswrite (line 188)
An error occurred on data export in CSV format.

Caused by:
    Error using dlmwrite (line 118)
    The input cell array cannot be converted to a matrix.

我把它归结为“xlswrite”调用的“dlmwrite”函数中的某个地方,它调用“cell2mat”,它将我的单元格数组的元素连接到一个字符数组。但是,它将垂直和水平连接元素,如果字符元素的长度不同,则无法垂直连接字符元素。您最终会得到一个尺寸不一致的数组。例如,

如果我有“abcdef”和“abc”,将它们垂直连接会得到:

abcdef

美国广播公司

第一行的长度为 6,第二行的长度为 3,如果您谈论的是矩阵,这在逻辑上没有意义,在这种情况下应该是 2X6。

有人知道解决方法吗?我对 MATLAB 中的这个故障感到非常沮丧。

4

1 回答 1

2

我没有收到您的错误 - 至少在我的输入版本中。您的“a”中有一个错误,但我想这只是在评论中,而不是在您的实际代码中。

也许错误得到了修复?我正在使用 2012a。

反正; 您可以使用建议的解决方法。它只是一行代码。

% here are your data
a = {'$','gsqtmpiv','lsso';...
    'gsqqmwwmsr','efwxvegxmsr','gpsgo';...
    'hexyq','tst','vyffiv';...
    'pek','geqive','xerkmivw';...
    'tvigsppyhih','fewmexih','vywxmge'};

% this works fine in 2012a
xlswrite('blah.xls',b)

% but using dlmwrite directly fails
% like you described
try
    dlmwrite('test.txt', a)
catch ME
    disp(ME.message)
end

% so instead use the suggested work-around:
b = cellfun(@(s) sprintf('%-12s', s), a, 'UniformOutput', false);
% and dlmwrite will no longer fail
dlmwrite('test.txt', b)

您需要知道字符串的最大长度(在您的测试数据中为 11)并在格式化字符串中使用它

'%12s' 

给出的最大长度为 12。

这样做的问题是,如果将它与 xlswrite 一起使用,则字符串中会有空格。如果您使用

'%-12s' 

格式化,所以除非您使用字符串进行进一步处理,否则可以吗?

于 2012-12-13T10:28:51.820 回答