2016-03-18 75 views
1

我想查找数组中的特定字符并将输出结果以相同的顺序打印到Excel表格中(即,如果元素之间没有匹配,则将其留空) 。将不同的单元格数组合成一个在MATLAB中

我用下面的代码内环路:

编辑:

[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 

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

我试过细胞的级联但在打印在单行所有的输出,但仍然在不同的细胞中每个人物

+0

为什么不直接通过电池阵列'xlswrite'?你为什么需要将它结合起来? 'xlswrite(filename,matchStr)'。 – Suever

+0

你能请分享更多的封闭代码吗?我不确定你的输入数据是什么格式(是** txt **只是一个字符串?)。请分享** txt **的样本和** for **循环的代码。 –

+0

@Suever我直接将单元格数组传递给xlswrite,它仍然具有相同的输出。 –

回答

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); 

输入文件行

  • 的Pyro-流感给E
  • 测试
  • 的Pyro-流感给E
  • 测试

输出文件的行给E


  • 的Pyro-GLU

    • 的Pyro-GLU给E

  • +0

    非常感谢保罗,帮助。如果我在相邻列中打印多个匹配项,我该怎么做?如果我创建一个mxn矩阵与个别列mathces matlab说该函数不能接受''cell'inputs。你能为此提出一些建议吗? –

    相关问题