.NET TIPS

コンソール・アプリケーションで進行状況を表示するには?[2.0のみ、C#、VB]

デジタルアドバンテージ 一色 政彦
2007/03/29

 「TIPS:時間がかかる処理の進行状況をダイアログで表示するには?」では、Windowsアプリケーションにおいて、時間がかかる処理の進ちょく状況をプログレス・メーター(ProgressBarコントロール)などを使ってエンド・ユーザーに提示する方法を紹介している。これと同じようなことは、コンソール・アプリケーションにおいても(時間がかかる処理などで)行いたいことがあるだろう。

 .NET Framework 2.0では、「TIPS:コンソール画面でカーソルを自由に移動させるには?」で紹介しているように、コンソール画面上のカーソルを扱う機能が大きく拡張されたため、このようなプログレス表示も簡単に実装できる。そこで本稿では、その簡単な実装サンプルを示すことにする。

1%ごとに進行状況を示すサンプル・プログラム

 次の画面のコンソール・アプリケーションは、棒が右回りにくるくる回転するアニメーションがテキストによって表示され(「/」「―」「\」「|」「/」「―」「\」「|」という順番にテキストが更新される)、またその右に実際のパーセンテージがテキスト表示されるというものだ。

処理の進ちょくをプログレス表示するコンソール・アプリケーション
処理の進行状況を表示するコンソール・アプリケーションの例。
  棒が右回りにくるくる回転するテキスト・アニメーションを表示する。
  パーセンテージをテキスト表示する。

 これを実装するプログラム・コードは次のとおりだ。

using System;

class Program
{
  static void Main()
  {
    Console.CursorVisible = false;

    char[] bars = { '/', '―', '\', '|' };

    for (int i = 0; i < 100; i++)
    {
      // 回転する棒を表示
      Console.Write(bars[i % 4]);

      // 進むパーセンテージを表示
      Console.Write("{0, 4:d0}%", i + 1);

      // カーソル位置を初期化
      Console.SetCursorPosition(0, Console.CursorTop);

      // (進行が見えるように)処理を100ミリ秒間休止
      System.Threading.Thread.Sleep(100);
    }

    Console.CursorVisible = true;

    // テスト用にプログラムの実行を中断
    Console.ReadLine();
  }
}
Module Module1

  Sub Main()
    Console.CursorVisible = False

    Dim bars() As Char = {"/"c, "―"c, "\"c, "|"c}

    For i As Integer = 0 To 99

      ' 回転する棒を表示
      Console.Write(bars(i Mod 4))

      ' 進むパーセンテージを表示
      Console.Write("{0, 4:d0}%", i + 1)

      ' カーソル位置を初期化
      Console.SetCursorPosition(0, Console.CursorTop)

      ' (進行が見えるように)処理を100ミリ秒間休止
      System.Threading.Thread.Sleep(100)
    Next

    Console.CursorVisible = True

    ' テスト用にプログラムの実行を中断
    Console.ReadLine()

  End Sub

End Module
処理の進ちょくをプログレス表示するサンプル・プログラム(上:C#、下:VB)

 このコードのポイントは、Consoleクラス(System名前空間)のSetCursorPositionメソッドを使ってカーソル位置を移動することにより、コンソール画面上の同じ位置に的確にテキストを出力しているところだ(カーソルの位置を移動しないと、テキストの表示位置が移動して、前に書いたテキストが残ったままになってしまう)。なお、ConsoleクラスのCursorTopプロパティは、現在カーソルのある行位置を取得するためのものである。

 また、ConsoleクラスのCursorVisibleプロパティはカーソルの表示/非表示を切り替えるためのものである。これらのコンソール画面上のカーソル処理については、「TIPS:コンソール画面でカーソルを自由に移動させるには?」をご参照いただきたい。

 棒(|)が回るアニメーションについては、(100%中の)パーセンテージを4で割った余り(=剰余)によって「/」「―」「\」「|」のどのテキストにするかを決定している。

 パーセンテージのテキスト表示については、「TIPS:数値を右詰めや0埋めで文字列化するには?」で紹介する書式指定を活用している。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:コンソール・アプリケーション 処理対象:画面
使用ライブラリ:Consoleクラス(System名前空間)
関連TIPS:時間がかかる処理の進行状況をダイアログで表示するには?
関連TIPS:コンソール画面でカーソルを自由に移動させるには?
関連TIPS:数値を右詰めや0埋めで文字列化するには?

この記事と関連性の高い別の.NET TIPS
コンソール画面でカーソルを自由に移動させるには?
待機状態のマウス・カーソルを表示するには?
コンソール画面をクリアするには?
Visual Studio 2005でクラスやメソッドの定義を簡単に参照するには?
マウス・カーソルの位置を取得・設定するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間