- PR -

コンソールアプリで同じ行に上書き表示するには

投稿者投稿内容
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2004-02-02 15:16
karajanです。
いつもお世話になります。

現在、コンソールアプリに挑戦しているのですが、あるループ処理の進捗状況をパーセントで表示する場合、

Console.Write("現在{0:P}", percent);
とすると、当然ながら
1%2%3%4%....
となってしまいます。

同じ箇所にパーセント表示を更新したいのですが、どのように方法があるのでしょうか。
コンソールアプリは初めてなので、難儀しています。

よろしくお願いします。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2004-02-02 15:35
コンソールアプリというと
具体的な方法は不明ですが、改行コードをいれる 画面をクリアなどの
方法とればよいのでは
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-02 15:37
コンソールアプリで動くかわかりませんが
DOSの場合は↓のように書いてました

Console.Write("現在{0:P}\r", percent);
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-02 15:37
ほむらです。
もしも、改行が\r\nで表現可能ならば\rだけにすれば同じ行に上書きします。
ただし。書き込みが余った部分はそのままになるので
足りない分はスペースで埋める必要があります。

だめなら、制御コード 0x10(CR)の出力でいくはず。。。

ちなみに、頻繁に書き換える場合はカーソルを消しておかないと
かっこよくいかないのであしからず。

#あっかぶった^^;;;
#そして僕もおなじく、DOSの知識です


[ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-02 15:40 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-02 16:03
脱線:

 う〜ん、DOSの頃はエスケープシーケンスを使っていたなぁ・・・忘れてる...--;

 Nifty Serve(現@nifty)のFGAL-ATにはエスケープシーケンス用の会議室があって、9600bpsならきれいに見えるエスケープシーケンスアニメを作っていました。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-02-02 16:24
\b(バックスペース)で戻るとか、\r(キャリッジリターン)で行の先頭に戻るとかでどうです?
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-02 16:26
引用:

Jittaさんの書き込み (2004-02-02 16:03) より:
脱線:

 う〜ん、DOSの頃はエスケープシーケンスを使っていたなぁ・・・忘れてる...--;

 Nifty Serve(現@nifty)のFGAL-ATにはエスケープシーケンス用の会議室があって、9600bpsならきれいに見えるエスケープシーケンスアニメを作っていました。



なつかしいですな。わたしはよくデバッグ文を固定位置に表示させるのに使ってました
あと、どの時代でも職人さんはいるものですね
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-02-02 16:53
このような方法があるんやないでしょうか?

import java.util.*;

public class cls
{
public static void main(String args[]){
for(int i=0; i<=100; i++){
System.out.println("^[[2J");
System.out.println("^[[0;0H");
System.out.println(i + "%");
}
}
}

又は

#define CLS "\033[2J"
#define HOME "\033[0;0f"

main()
{
int i;

for(i = 0; i<=1024; i++){
printf(CLS);
printf(HOME);
printf("%d \%", i);
}
}

Windows で動くかどうかは解りませんが・・・

スキルアップ/キャリアアップ(JOB@IT)