String 在写入值向量和换行符时避免多次调用fprintf

String 在写入值向量和换行符时避免多次调用fprintf,string,matlab,printf,String,Matlab,Printf,我使用fprintf将值从向量输出到文本文件。是否可以在不需要两次调用fprintf的情况下,将换行符添加到正在打印的每个向量的末尾 示例,生成所需的输出1234,但对下面的fprintf进行了两次调用 A = [1 2 3 4]; fprintf('%d ', A) fprintf('\n') 例如,如果尝试fprintf(“%d\n',A),这会产生不希望的效果,即在打印的每个数字之后添加换行符: >> fprintf('%d \n', A) 1 2 3 4 我这样问

我使用
fprintf
将值从向量输出到文本文件。是否可以在不需要两次调用
fprintf
的情况下,将换行符添加到正在打印的每个向量的末尾

示例,生成所需的输出
1234
,但对下面的
fprintf
进行了两次调用

A = [1 2 3 4];
fprintf('%d ', A)
fprintf('\n')
例如,如果尝试
fprintf(“%d\n',A)
,这会产生不希望的效果,即在打印的每个数字之后添加换行符:

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

我这样问是出于一般的好奇。当然,对性能的影响可能很小。

这不是一个优雅的解决方案,但

fprintf([repmat('%d ',1,numel(A)) '\n'], A)
或者,正如@nikkola所指出的:

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

删除换行前的尾随空格。

使用
sprintf
的另一个不雅观的解决方案:

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

事实上,如果你有很多这样的电话,对性能的影响可能会很大。MATLAB的I/O函数的旧行为是在每次写入后刷新文件缓冲区。不确定是否仍然是这样,但我不认为这些函数是MathWorks的优先权…@CST Link,et al.:如果要写入文件,有一种方法可以禁用自动刷新:。我不确定这是否适用于这种情况下的数组参数,或者在其他情况下是否可以禁用自动刷新。如果需要良好的性能,您可能应该使用
dlmwrite()
。@GameOfThrows它非常接近
eval
:-)好主意!也许
fprintf([repmat('%d',1,numel(A)-1)'%d\n'],A)
可以在换行前删除尾随空格?@mikkola好主意,是的!Edited@LuisMendo我认为edit实际上比最初的版本更好,它有两个
fprintf
调用,我相信后面还有空格。