我正在尝试查找数组中的特定字符,并以相同的顺序将输出打印到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
如何在矩阵中留下空白,并在输出的单个单元格中包含整个匹配短语?
我尝试连接单元格,但是将所有输出打印在一行中但仍然在不同单元格中的每个字符
答案 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);
输入文件行
输出文件行