BigBastis Blog

Aktuelle Zeile bei Kommandozeilen Applikationen aktualisieren

Introduction

user

Sebastian Gross

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.


LATEST POSTS

Handling too long scrollspy menus 10th June, 2015

Java: Create ZIP archive 23rd March, 2015

.NET

Aktuelle Zeile bei Kommandozeilen Applikationen aktualisieren

Posted on .

Vielleicht ist euch das ja auch schon Mal passiert, ihr entwickelt eine Kommandozeilen-App und wollt die Aktuelle Zeile ändern. Ein Beispiel dafür wäre ein Fortschrittsbalken oder der beliebte Command-Line-Spinner ( bestehend aus den Zeichen /, -, \, |. Wenn diese nacheinander angezeigt werden sieht das so aus wie ein sich drehender Ast 🙂

Das Ganze kann in allen Kommandozeilenfenstern, egal ob Unix oder Windows implementiert werden. Der Schlüssel hierzu ist das Sonderzeichen \b – welches das Drücken der Backspace Taste simuliert. Ähnliche Vertreter sind \t für Tab und \n für Zeilenumbruch.

Solange ihr noch keinen Zeilenumbruch abgesetzt habt könnt ihr jede Ausgabe in der aktuellen Zeile widerrufen durch das ausgeben von \b dabei müsst ihr jedes Zeichen einzeln widerrufen. Wenn wir nun also unser Spinner-beispiel betrachten kann man das sehr einfach in .NET umsetzen:

        static void Main(string[] args) {
            string[] states = { "\", "|", "/", "-" };
            int cur_state = 0;

            while (true) {
                Thread.Sleep(100);

                Console.Write("b");
                Console.Write(states[cur_state]);
                cur_state++;
                if (cur_state == 4) {
                    cur_state = 0;
                }
            }
        }

Genauso einfach geht das Ganze dann auch in Java:

        public static void Main(string[] args) {

            string[] states = { "\", "|", "/", "-" };
            int cur_state = 0;

            while (true) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException ex) {}

                System.out.print("b");
                System.out.print(states[cur_state]);
                cur_state++;
                if (cur_state == 4) {
                    cur_state = 0;
                }
            }
        }

Ist in jedem Fall ein nettes Gimmick 🙂 Beachten sollte man noch, dass man hier print() bzw. Write() benutzen muss und nicht println() oder WriteLine() da hier sonst automatisch ein \n mit an das Ende der Zeile gepackt wird!

profile

Sebastian Gross

http://www.bigbasti.com

Sebastian Gross arbeitet in Bielefeld als Softwareentwickler für .NET und Java im Bereich Web.Als Fan der .NET-Plattform lässt er sich kein Userguppen Treffen und Community Event im Raum OWL entgehen.Dabei hat er eine besondere Vorliebe für das ASP.NET MVC Framework und für das Test Driven Development (TDD) entwickelt.

There are no comments.

Kommentar verfassen

View Comments (0) ...
Navigation