在MATLAB中将不同的单元格数组合成一个

时间:2016-03-18 16:55:15

标签: arrays excel matlab

我正在尝试查找数组中的特定字符,并以相同的顺序将输出打印到excel表中(即如果之间没有匹配的元素则将其留空)。

我在循环中使用了以下代码:

编辑:

[num,txt,~] = xlsread('protein-peptides.xls')
for i=1:size(txt)
 str(i)=txt(i)
 expression='\w*Pyro-glu from E\w*';
 matchStr(i)=regexp(str(i),expression,'match','once');                             
 ArrayOfStrings=vertcat(matchStr{:}); 
end

循环之后:

xlswrite(filename,ArrayOfStrings,1);

输出如下。

1)没有匹配的元素不会显示为空白

2)匹配的每个单词都显示在不同的单元格中。

P   y   r   o   -   g   l   u       f   r   o   m       E
P   y   r   o   -   g   l   u       f   r   o   m       E
P   y   r   o   -   g   l   u       f   r   o   m       E
P   y   r   o   -   g   l   u       f   r   o   m       E

如何在矩阵中留下空白,并在输出的单个单元格中包含整个匹配短语?

我尝试连接单元格,但是将所有输出打印在一行中但仍然在不同单元格中的每个字符

1 个答案:

答案 0 :(得分:1)

我知道你可能更喜欢使用 xlswrite ,但我无法让它工作(至少在OS X上)。正如您所观察到的那样, xlswrite 似乎会自动删除空单元格。它似乎也将每个细胞分布在多个柱子上,这与我记忆中的行为有些奇怪和不同。我想知道最近是否有更新(我使用R2015b)。

我能够使用简单的 fprintf 调用来编写CSV文件,可以在Excel中打开。请注意,终止字符( \ r )至关重要;如果替换为换行符,则Excel中似乎不会保留空单元格。我还重构了你的代码。

% Load data from Excel file
[~, txt, ~] = xlsread('protein-peptides.xls');

% Perform analysis
expression='\w*Pyro-glu from E\w*';
for i = 1:length(txt)
    matches(i, 1) = regexp(txt(i), expression, 'match', 'once');
end

% Write data to CSV file
fid = fopen('test.csv', 'w+');
for i = 1:length(matches)
    fprintf(fid, '%s\r', matches{i});
end
fclose(fid);

输入文件行

  • 来自E的Pyro-Flu
  • 测试
  • 来自E的Pyro-Flu
  • 测试

输出文件行

  • 来自E的Pyro-glu

  • 来自E的Pyro-glu