在MATLAB中输出文本/数字,但在命令窗口中覆盖同一行

在MATLAB中输出文本/数字,但在命令窗口中覆盖同一行,matlab,formatting,printf,Matlab,Formatting,Printf,所以我有一个for循环,在每次迭代中,我都希望显示格式化的文本以及一些数字。我想通常可以使用disp或fprintf,但我想做的是让命令窗口的相同部分输出文本/数字,只是覆盖旧的输出 我怎么能做到呢?我在其他一些节目中看到过,所以我知道这是可能的,但不是如何做到的 例如,在for循环的第一次迭代中,我希望在命令提示符下输出: >> Measurement1 : 0.33 0.23 0.34 -32.32 Measurement2 : 433.2 Text Stuff

所以我有一个for循环,在每次迭代中,我都希望显示格式化的文本以及一些数字。我想通常可以使用disp或fprintf,但我想做的是让命令窗口的相同部分输出文本/数字,只是覆盖旧的输出

我怎么能做到呢?我在其他一些节目中看到过,所以我知道这是可能的,但不是如何做到的

例如,在for循环的第一次迭代中,我希望在命令提示符下输出:

>> Measurement1 : 0.33 0.23 0.34 -32.32
   Measurement2 : 433.2
   Text Stuff   : 'The cat who ate the rat'
现在,在循环的第二次迭代中,我不需要一行或几行新行,我只需要在命令窗口的同一位置替换旧数字和旧文本。在第二次迭代中,我可能会得到:

>> Measurement1 : -132.3 32.1 32.23 -320.32
   Measurement2 :  3.2
   Text Stuff   : 'The dog who ate the cat'

谢谢

以下是一个您正在寻找的示例:

%# Generate the data
Measurement1 = {[0.33 0.23 0.34 -32.32]; [-132.3 32.1 32.23 -320.32]};
Measurement2 = {433.2; 3.2};
TextStuff = {'The cat who ate the rat'; 'The dog who ate the cat'};
s = cell2struct([Measurement1, Measurement2, TextStuff], ...
    {'Measurement1', 'Measurement2', 'TextStuff'}, 2); 

str_format = @(tag, value)sprintf('%s:%s', tag, value);

%# Iterate over the data and print it on the same figure
figure
for i = 1:length(s)

    %# Clear the figure
    clf, set(gcf, 'color', 'white'), axis off

    %# Output the data
    text(0, 1, str_format('Measurement1', num2str(s(i).Measurement1)));
    text(0, 0.9, str_format('Measurement2', num2str(s(i).Measurement2)));
    text(0, 0.8, str_format('TextStuff', s(i).TextStuff))

    %# Wait until the uses press a key
    pause
end
请注意,强制您在执行下一个迭代之前按一个键。我把它放在那里,这样你就有机会在每次迭代中看到图

p.S
根据(你的另一个问题),你也可以输出乳胶方程式


编辑-更多解释:

是将单元格数组转换为结构数组的函数。在您的例子中,有
Measurement1
Measurement2
TextStuff
,每一个都是一个单元格数组,保存着不同字段的数据。
所有单元格数组统一为一个单元格数组:
[Measurement1,Measurement2,TextStuff]
cell2struct
从每个单元格数组中获取每一行并形成一个结构,结果存储为一个结构数组,如下所示:

s = 

2x1 struct array with fields:
    Measurement1
    Measurement2
    TextStuff
您可以使用
s(1)
提取第一组值,使用
s(2)
提取第二组值,依此类推。 例如
s(1).TextStuff
给你
“吃老鼠的猫”

我建议您在MATLAB命令提示符中键入
s
,以查看其内容

助手函数
str_format
是我创建的用于格式化每个字段的输出字符串的函数。它的输入参数是
tag
(字段名字符串)和
value
(字段值字符串),这两个参数使用命令连接在一起,类似于C/C++中的函数。

文章指出,可以使用退格,但似乎也说它不能处理多行


其原理是,在每次迭代中,您都会输出足够的退格字符,以便将光标移动到输出的开头,然后开始在旧的输出上写入新的输出。在来回移动光标时,必须跟踪光标的位置

我使用'dispstat'函数就是为了这个目的。它可以更新先前的输出,该输出是默认“disp”的缺失函数。使用非常简单。可从以下网址下载:

***示例用法:

 dispstat('','init'); % One time only initialization
 dispstat(sprintf('Begining the process...'),'keepthis','timestamp');
 for i = 97:100
     dispstat(sprintf('Progress %d%%',i),'timestamp');
     %doing some heavy stuff here
 end
 dispstat('Finished.','keepprev');
***输出:

11:25:37 Begining the process...
11:25:37 Progress 100%
Finished.

祝您一切顺利,非常感谢。你能不能把设置s=cell2struct的行和str_格式的行展开?我想除了这两个,我什么都懂了。下面的“解决方案”描述了一种方法:嗯,谢谢Edric,我想它会管用的,但我愿意接受更优雅的解决方案。我认为这和在MATLAB命令窗口中得到的一样好——我不知道如何处理多行文本。下一个选项是制作一个简单的GUI。您可以使用的答案来实现这一点,只需在迭代之间清除图形,而不要保持文本的位置不变。如果您遇到麻烦,我可以为您提供示例代码。@EitanT我将非常感谢您。请注意,MATLAB最终会抱怨命令行太长(包括退格),您将收到一条
输出截断的消息。