所以我有一个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'
由于
答案 0 :(得分:2)
This文章指出你可以使用退格键,但它似乎也说它不适用于多行。
原则是在每次迭代时输出足够的退格字符,将光标移动到输出的开头,然后开始将旧输出写入旧输出。在前后移动时,您必须跟踪光标位置。
答案 1 :(得分:2)
我为此目的使用'dispstat'功能。它可以更新以前的输出,这是默认'disp'的缺失功能。使用非常简单。可以从这里下载:http://www.mathworks.com/matlabcentral/fileexchange/44673-overwritable-message-outputs-to-commandline-window
***样本用法:
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.
一切顺利
答案 2 :(得分:1)
以下是您正在寻找的示例:
%# 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
请注意pause
强制您在执行下一次迭代之前按下某个键。我把它放在那里,这样你就有机会在每次迭代中看到这个数字。
P.S
基于this answer(对你的另一个问题),你也可以输出LaTex方程。
编辑 - 更多解释:
cell2struct
是一个将单元格数组转换为结构数组的函数。在您的情况下,您有Measurement1
,Measurement2
和TextStuff
,每个都是包含不同字段数据的单元格数组。
所有单元阵列统一为一个单元阵列数组:[Measurement1, Measurement2, TextStuff]
。 cell2struct
从每个单元格数组中获取每一行并形成一个结构,结果存储为一个结构数组,如下所示:
s =
2x1 struct array with fields:
Measurement1
Measurement2
TextStuff
您可以使用s(1)
提取第一组值,使用s(2)
提取第二组,依此类推。
例如,s(1).TextStuff
会为您提供'The cat who ate the rat'
。
我建议您在MATLAB命令提示符下键入s
以查看其内容。
辅助函数str_format
是我创建的anonymous function,用于格式化每个字段的输出字符串。它的输入参数是tag
(字段名称字符串)和value
(字段值字符串),它们使用sprintf
命令连接在一起,类似于sprintf
函数。 C / C ++。