2012-12-09 17 views
3

当我试图使用xlswrite为单元阵列4X10或所以在每个元件具有不同长度的字符串,MATLAB返回此错误:使用“xlswrite”用于包含不同大小的字符串单元阵列MATLABs

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. 

什么我把它解释成在“xl_write”调用的“dlmwrite”函数中的某处,它调用“cell2mat”,它将我的单元格数组的元素连接到一个字符数组。但是,它会将元素垂直和水平连接起来,并且如果字符元素的长度不相同,则不可能将它们垂直连接起来。您将最终得到一个不一致维度的数组。例如,

如果我有 'ABCDEF' 和 'ABC',串联它们垂直会给:

ABCDEF

ABC

第一行具有6的长度,并且所述第二行的长度为3,如果你正在讨论一个矩阵,在这种情况下应该是2X6,这并不合逻辑。

有没有人知道这个解决方法?我非常沮丧于MATLAB中的这个毛病。

+0

你可以发布你试图写的数据吗? – Serg

+0

a = {'$','gsqtmpiv','lsso';'gsqqmwwmsr','efwxvegxmsr','gpsgo';'hexyq','tst','vyffiv';'pek','geqive','xerkmivw ';' tvigsppyhih”, 'fewmexih', 'vywxmgepp}'; –

+0

xlswrite('blah.xls',a) –

回答

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' 

格式,所以除非你使用作进一步处理字符串的可能行吗?

相关问题