3

したがって、forループがあり、すべての反復で、フォーマットされたテキストといくつかの数値を表示したいと思います。通常はdispまたはfprintfを使用できますが、私がやりたいのは、コマンドウィンドウの同じ部分にテキスト/数値を出力させ、古い出力を上書きすることです。

どうすればそれができるでしょうか?私は他のいくつかのプログラムでそれを見たので、それが可能であることは知っていますが、その方法はわかりません。

例として、forループの最初の反復で、これをコマンドプロンプトに出力したいとします。

>> Measurement1 : 0.33 0.23 0.34 -32.32
   Measurement2 : 433.2
   Text Stuff   : 'The cat who ate the rat'

ここで、ループの2回目の反復で、新しい行は必要ありません。コマンドウィンドウの同じ場所で、古い数字と古いテキストを置き換えるだけです。したがって、2回目の反復で、次のようになる可能性があります。

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

ありがとう

4

3 に答える 3

2

この記事は、バックスペースでそれを行うことができることを示していますが、複数の行では機能しないとも言われているようです。

原則は、各反復で、カーソルを出力の先頭に移動するのに十分なバックスペース文字を出力してから、古い出力の上に新しい出力を書き始めることです。カーソルを前後に移動するときは、カーソルの位置を追跡する必要があります。

于 2012-09-03T15:58:06.803 に答える
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.

ではごきげんよう

于 2013-12-12T10:22:50.613 に答える
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次の反復が実行される前に、キーを押す必要があることに注意してください。各反復で図を見る機会を得られるように、そこに配置しました。

PSこの回答
(あなたの別の質問に対する)に 基づいて、LaTex方程式を出力することもできます。


編集-もう少し説明:

cell2structセル配列を構造体配列に変換する関数です。あなたの場合、、、がありMeasurement1、それぞれが異なるフィールドに関するデータを保持するセル配列です。すべてのセル配列は、セル配列の 1つの配列に統合されます。各セル配列から各行を取得して構造体を形成し、その結果は次のように構造体の配列として格納されます。Measurement2TextStuff
[Measurement1, Measurement2, TextStuff]cell2struct

s = 

2x1 struct array with fields:
    Measurement1
    Measurement2
    TextStuff

を使用して最初の値のセットを抽出し、、を使用s(1)して2番目の値のセットを抽出できますs(2)。たとえば、s(1).TextStuffあなたに与えます'The cat who ate the rat'

sその内容を確認するには、MATLABコマンドプロンプトに入力することをお勧めします。

ヘルパー関数str_formatは、各フィールドの出力文字列をフォーマットするために作成した無名関数です。その入力引数はtag(フィールド名文字列)とvalue(フィールド値文字列)であり、C / C ++sprintfの関数と同様に、コマンドを使用して連結されます。sprintf

于 2012-09-03T15:56:24.383 に答える