当我尝试将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.
我把它归结为“dlmwrite”函数中由“xlswrite”调用的某个地方,它调用“cell2mat”,它将我的单元数组的元素连接到一个字符数组。但是,它会垂直和水平地连接元素,如果它们的长度不同,则不可能垂直连接字符元素。您最终会得到一个不一致维度的数组。例如,
如果我有'abcdef'和'abc',将它们垂直连接会给出:
ABCDEF
ABC
第一行的长度为6,第二行的长度为3,如果您正在讨论矩阵,则在逻辑上没有意义,在这种情况下应该是2X6。
有人知道解决方法吗?我对MATLAB中的这个故障感到非常沮丧。
答案 0 :(得分: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)
您需要知道字符串的最大长度(在testdata中为11)并在格式化字符串中使用
'%12s'
最大长度为12。
问题在于,如果将它与xlswrite一起使用,则字符串中将包含空格。如果您使用
,它们是不可见的'%-12s'
格式化,所以除非你使用字符串进行进一步处理,否则它可能没问题?