2016-03-18 115 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。你能爲此提出一些建議嗎? –

    相關問題