Arrays 使用;xlswrite";包含不同大小字符串的单元格数组的MATLABs

Arrays 使用;xlswrite";包含不同大小字符串的单元格数组的MATLABs,arrays,matlab,Arrays,Matlab,当我尝试将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用于每个元素中长度不同的字符串的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

abc

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


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

我不知道你的错误-至少我的输入版本是这样的。您的“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' 

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

您可以发布您尝试写入的数据吗?a={'$,'gsqtmpiv','lsso';'gsqqmwwmsr','efwxvegxmsr','gpsgo','hexyq','tst','vyffiv','pek','geqive','xerkmivw','tvigspyh','fewmexhih','vywxmgepp};简单的解决方法是自己填充数据。此外,请注意,您的
a
似乎没有正确定义,最好在问题中包含最小的示例。