2015-12-04 70 views
4

我從載體到一個文本文件中使用fprintf輸出值時fprintf中。是否可以在打印的每個矢量的末尾添加換行符,而不需要兩次調用fprintf避免多次調用寫入值的矢量和換行符

生成所需輸出1 2 3 4的示例,但下面有兩個調用fprintf

A = [1 2 3 4]; 
fprintf('%d ', A) 
fprintf('\n') 

如果你嘗試fprintf('%d \n', A)例如,這會產生打印每一個數字後面添加一個換行符的不良影響:

>> fprintf('%d \n', A) 
1 
2 
3 
4 

我問出的好奇心。對性能的影響當然可能很小。

+0

其實如果你有很多這樣的電話對性能的影響可能是顯著。 MATLAB的I/O函數的舊行爲是在每次寫入之後刷新文件緩衝區。不知道是否仍然如此,但我不認爲這些函數是MathWorks的優先級... –

+0

@ CST-Link,等:如果您正在寫入文件,有一種禁用方法自動刷新:[高性能文件I/O](http://blogs.mathworks.com/loren/2006/04/19/high-performance-file-io/)。我不確定這是否適用於數組參數,或者在其他情況下可以禁用自動刷新。 – horchler

+0

你或許應該使用'dlmwrite()'如果你需要良好的性能... – Sifu

回答

4

不是一個完美的解決方案,但是......

fprintf([repmat('%d ',1,numel(A)) '\n'], A) 

或者,正如@nikkola指出:

fprintf([repmat('%d ',1,numel(A)-1) '%d\n'], A) 

刪除換行符之前的尾隨空白。

+0

天哪... + 1讓你甚至想出這個... – GameOfThrows

+0

@GameOfThrows這是可笑的接近'eval' :-) –

+1

好主意!也許'fprintf([repmat('%d',1,numel(A)-1)'%d \ n'],A)'去除換行符之前的空白符號? – mikkola

2

使用sprintf另一種不雅的解決方案:

A = [1 2 3 4]; 
fprintf('%s\n',sprintf('%d ', A))