2013-10-15 37 views
3

我想在matlab上用fprintf編寫一個文本文件。我使用for循環:在matlab上用fprintf寫一個文本文件

fID = fopen('fileName','w'); 
fSpec = cat(2,repmat('%s', 1, 3),'\n'); 
for k=1:10 
    to_write = [num2str(k) ',' num2str(k*k)]; 
    fprintf(fID, fSpec, to_write); 
end 
fclose(fID); 

寫入文件,但僅在一行上。我試着用gedit和matlab打開它。

出了什麼問題?

+0

也許你需要一個行返回字符? 'to_write = [num2str(k)','num2str(k * k),'\ r \ n'];'? – Dan

+0

nope。我試過這個。 matlab文檔說,要使用它,如果你想打開你的文件與記事本 – bigTree

回答

4

您的格式說明是有點怪異。 to_write將是一個普通的字符串,那麼爲什麼你將fSpec構造爲%s%s%s\n

如果你想每個循環一個行,你可以簡單地做:

for k=1:10 
    to_write = [num2str(k) ',' num2str(k*k)]; 
    fprintf(fID, '%s\n', to_write); 
end 

編輯:

如果%s%s%s\n被設計成三個字符串匹配[num2str(k) ',' num2str(k*k)]:這是沒有必要的。 [num2str(k) ',' num2str(k*k)]的結果只是一個單一的字符串 - 所以你只需要一個'%s'格式說明符,而不是三個。

+0

謝謝你的解釋。我不知道整行可以被認爲是一個字符串 – bigTree

+0

我忽略了一個字符串應該打印到文件的事實,不知何故,我認爲它需要是一個整數。 +1提供答案! – Fraukje

+0

這是問題的正確答案,但我認爲值得指出的是,正確的方法是這樣做的:將循環中的兩行替換爲單行fprintf(fID,'%d,%d \ n',k,k * k);'。 –

0

我能夠在代碼中找到兩件小事。

首先,你要在寫完每行後打回來,因此\n。其次,你嘗試使用fprint來寫一個字符串值,因爲你使用的是%s,把它改爲%d解決了它我想!

所以更新的代碼應爲:

fID = fopen('fileName','w'); 
fSpec = cat(2,repmat('%d', 1, 3),'\n'); 
for k=1:10 
    to_write = [num2str(k) ',' num2str(k*k)]; 
    fprintf(fID, fSpec, to_write); 
end 

fclose(fID); 
+0

它確實工作!你的代碼和我的唯一區別在於你用%d代替了%s。它爲什麼有效?不是%s是字符串的說明符嗎? – bigTree

+1

這沒有意義。使用'%d'將每個字符寫入'to_write'作爲其整數值。這肯定不是滿意的... – sebastian