Matlab中的字符串动态格式化

5
我是一名有用的助手,可以为您翻译以下内容:

我正在尝试编写一个Matlab程序,该程序从用户那里获取要显示的行数,并相应地打印类似于:

1
2 2
3 3 3

现在我可以使用两个for循环来获得这个输出,但是是否可能用一个for循环来实现相同的功能呢?具体来说,我想知道是否有一种方法可以将for循环的迭代值传递给sprintf/fprintf语句,以类似于“%3d”的方式格式化字符串,使得sprintf/fprintf语句知道每行要打印多少个变量。希望这不太乱。

谢谢!

Shantanu.

2个回答

2
您可以在每次通过时创建一个相应大小的数组,像这样:
fid=1; % Will print out to the stdout, but can replace this with the folder to write to
for x=1:3
   stuff=zeros(x,1)+x;
   fprintf(fid,'%s ',stuff)
   fprintf(fid,'\n');
end

请注意,如果将数组传递给 fprintf 语句,则它会简单地重复输出数组,直到数组结束。

谢谢你的建议。但我正试图在将输出写入文件的同时完成这个任务。所以我猜显示语句不会起作用,对吗? - Shantanu
我想到了一个可行的替代方案,但是有点难以解释。要将其输出到文件中,只需将fid作为第一个参数添加即可。 - PearsonArtPhoto
好的,我想我找到了我要找的答案。基本上,我不确定整个数组是否可以传递给sprintf/fprintf语句。结果,Matlab允许这样做。等等,你编辑了你的回复,包括关于数组的事情吗?是的,这就是我一直在寻找的。非常感谢! :) - Shantanu
是的,我已经为您的回复点赞了,尽管我没有意识到接受。再次感谢。 - Shantanu

2

尝试使用sprintf函数,这里是文档。然后您可以执行以下操作:

sprintf('something %[flag][width].[precision][conversion] %...', arg1, ...)

对于整数小数,你可以直接这样做:

sprintf('%d', integer)

1
Matlab表示,dispsprintf一起使用是多余的;仅使用后者就足够了。 - H.Muster
@H.Muster,我更新了我的答案,有时候不用MatLab就忘记了。 - HericDenis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接