2013-08-26 41 views
0

得到不同的文本文件中類似的文件我用ismember()節能常見字符串到一個新的文本文件在MATLAB

file1 = {'DSC01605.bmp';'Hampi8.bmp';'DSC01633.bmp';... 
'DSC01198.bmp';'DSC01619.bmp'} 

file2 = {'DSC01605.bmp';'Hampi8.bmp';'DSC01633.bmp'} 

file3 = {'DSC01605.bmp';'Hampi8.bmp'} 

matching12 = ismember(file1, file2) 
matching13 = ismember(file1, file3) 
matchesAll3 = matching12 & matching13 

allMatchingStrings = file1(matchesAll3) 

現在allMatchingStrings包含

'DSC01605.bmp' 
'Hampi8.bmp' 

我怎樣才能將這些文件寫入一個新的文本文件all.txt?我的要求有問題 - 假設allMatchingStrings包含大約10個文件,但我只需要這10個文件中的5個。我需要將5個文件保存到一個新的文本文件中,如all.txt。我怎樣才能做到這一點?

+0

新的文本文件'all.txt'每次都需要覆蓋,我的意思是'all.txt'中的內容應該覆蓋舊的,如果其他文件存儲在'allMatchingStrings'中 – Chethan

+2

你能解釋一下這個: *'allMatchingStrings'包含大約10個文件,但是我只需要這10個文件中的5個*。你如何確定'allMatchingStrings'中的哪些名稱寫入文件? – Schorsch

+0

對不起,我沒有提到,在10個文件中,它可以是任何5或從頂部列出的那些,我的意思是從第1到第5個文件開始。 – Chethan

回答

0

將它們寫入磁盤的快速方法是使用fprintf命令。

fid = fopen('all.txt', 'w'); 
fprintf(fid, '%s\n', allMatchingStrings{:}); 
fclose(fid); 

如果你只是想寫allMatchingStrings第2名,那麼你可能會限制這樣的:

filenamesIWant = 1:2; 
fid = fopen('all2.txt', 'w'); 
fprintf(fid, '%s\n', allMatchingStrings{filenamesIWant}); 
fclose(fid); 

這工作,因爲每一個你給它的字符串命令fprintf中重複。唯一的竅門是把大括號放在正確的位置。

+0

'1:2'表示什麼?如果我想要第一個5個文件,'1:5'會起作用嗎? – Chethan

+0

這會導致錯誤'???電池內容物從非單元陣列引用object.'在== '錯誤> Fig5> search_Callback在309' 'fprintf中(FID, '%S \ N',allMatchingStrings {filenamesIWant});' '錯誤in ==> gui_mainfcn at 96' 'feval(varargin {:});' – Chethan

+1

上面的代碼似乎是正確的。您的錯誤消息表明'allMatchingStrings'不是此函數上下文中的單元格數組。在語句之前放置一個斷點(自己在線上添加'keyboard'行),然後檢查變量。錯誤應該是顯而易見的。 – Floris

相關問題