【问题标题】:Dynamic formatting of strings in MatlabMatlab中字符串的动态格式化
【发布时间】:2012-12-19 14:24:05
【问题描述】:

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

1
2 2
3 3 3

.. 以此类推

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

谢谢!

山塔努。

【问题讨论】:

    标签: arrays matlab printf


    【解决方案1】:

    您可以简单地创建一个数组,每次传递到适当的大小,如下所示:

    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 语句,它将简单地重复,直到数组完成。

    【讨论】:

    • 感谢您的建议。但是我试图在将输出写入文件时完成这项工作。所以我猜显示语句不起作用,对吧?
    • 我想出了一个可行的替代方案,但有点难以解释。要将其输出到文件中,只需将 fid 作为第一个参数添加即可。
    • 好的,我想我已经找到了我想要的答案。基本上我不确定是否可以将整个数组传递给 sprintf/fprintf 语句。事实证明,Matlab 确实允许这样做。等等,您是否编辑了您的回复以包含有关数组的内容?是的,这就是我一直在寻找的。万分感谢! :)
    • 是的,我赞成你的回复,虽然我不知道接受。再次感谢。
    【解决方案2】:

    试试sprintf函数,here是文档。比你做的事情:

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

    对于整数小数,您可以这样做:

    sprintf('%d', integer)
    

    【讨论】:

    • dispsprintf 一起使用是多余的; Matlab 说,使用后者就足够了。
    • @H.Muster,更新了我的答案,有些时候没用 MatLab 忘记了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多