【问题标题】:Using "xlswrite" MATLABs for cell arrays containing strings of different size对包含不同大小字符串的元胞数组使用“xlswrite”MATLAB
【发布时间】:2012-12-13 18:28:51
【问题描述】:

当我尝试将 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 = {'$','gsqtmpiv','lsso';'gsqqmwwmsr','efwxvegxmsr','gpsgo';'hexyq','tst','vyffiv';'pek' ,'geqive','xerkmivw';'tvigsppyhih','fewmexih','vywxmgepp}';
  • 简单的解决方法是自己填充数据。此外请注意,您的 a 似乎没有正确定义,最好在问题中包含最小示例。

标签: arrays matlab


【解决方案1】:

我没有收到您的错误 - 至少在我的输入版本中。您的“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' 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2011-03-14
    • 2015-10-21
    • 2011-02-07
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多