4.9 Konsolenanwendung
Bisher wurden in diesem Buch ausschließlich Windows-Anwendungen entwickelt, also Programme mit der gewohnten und komfortabel bedienbaren Benutzeroberfläche. Je nach Einsatzzweck kann aber auch eine so genannte Konsolenanwendung genügen, bei der nur einfache Eingaben und Ausgaben in Textform vorkommen. Konsolenanwendungen benötigen wesentlich weniger Programmcode und Speicher.
Den Konsolenanwendungen stehen natürlich auch alle Möglichkeiten der Sprache Visual Basic und des .NET-Frameworks zur Verfügung, so z. B. der Zugriff auf Dateien oder Datenbanken.
4.9.1 Anwendung erzeugen
Zur Erzeugung einer Konsolenanwendung gehen Sie zunächst wie gewohnt vor, also über das Menü Datei, Menüpunkt Neues Projekt. Im Dialogfeld Neues Projekt wählen Sie allerdings statt der Vorlage Windows Forms-Anwendung die Vorlage Konsolen-Anwendung aus. Tragen Sie im Feld Name einen Projektnamen ein, z. B. KonsoleEinAus.
Im Codefenster erscheint die Datei Module1.vb mit folgendem Code:
Module Module1
Sub Main()
End Sub
End Module
Listing 4.30 Projekt KonsoleEinAus, noch ohne eigenen Code
In diesem Code-Modul Module1 steht die Methode mit dem Namen Main(), mit dem jedes VB-Projekt startet.
Hinweis: Die Methode Main() könnte einen Parameter haben: einen Verweis auf ein Feld von Zeichenketten. Damit ist es möglich, eine Anwendung von der Kommandozeile aus mit Startparametern zu versorgen, siehe Abschnitt 4.9.6.
4.9.2 Ein- und Ausgabe von Text
Die Methode Main() des Projekts KonsoleEinAus wird jetzt mit eigenem Code gefüllt:
Module Module1
Sub Main()
Dim s As String
Console.Write("Bitte einen Text eingeben: ")
s = Console.ReadLine()
Console.WriteLine("Es wurde der Text " &
s & " eingegeben")
End Sub
End Module
Listing 4.31 Projekt »KonsoleEinAus«, Ein- und Ausgabe
Zur Erläuterung:
- Im Namensraum System gibt es die Klasse Console zur Ein- und Ausgabe auf einem Textbildschirm.
- Die statische Methode Write() schreibt einen Text auf den Bildschirm.
- Die statische Methode ReadLine() führt dazu, dass das Programm anhält und auf eine Eingabe wartet. Nach der Eingabe betätigt der Benutzer die Taste . Die Methode liefert als Rückgabewert die eingegebene Zeichenkette. Diese kann z. B. in einer Variablen vom Datentyp String gespeichert werden.
- Auch die Methode WriteLine() schreibt einen Text auf den Bildschirm, diesmal gefolgt von einem Zeilenumbruch.
Die Bedienung des Programms:
- Nach dem Start des Programms, wie gewohnt mit der Taste , wird ein Konsolenfenster geöffnet.
- Nach der Eingabe des Textes ist die anschließende Ausgabe allerdings nur sehr kurz zu sehen, bevor sich das Konsolenfenster wieder von selbst schließt.
- Es empfiehlt sich daher, dass Sie das Programm mit der Tastenkombination + starten. Dies führt dazu, dass das Programm nach Ablauf auf einen Tastendruck wartet, wie nachfolgend zu sehen:
Bitte einen Text eingeben: Hallo
Es wurde der Text Hallo eingegeben
Drücken Sie eine beliebige Taste . . .
4.9.3 Eingabe einer Zahl
Zur Verdeutlichung der besonderen Problematik bei der Eingabe von Zahlen wird die Methode Main() des Projekts KonsoleEinAus um weiteren Programmcode ergänzt:
Module Module1
Sub Main()
Dim x As Double
. . .
Try
Console.Write(
"Bitte eine Zahl eingeben: ")
x = Convert.ToDouble(Console.ReadLine())
Console.WriteLine("Es wurde die Zahl " &
x & " eingegeben")
Catch
Console.WriteLine(
"Es wurde keine Zahl eingegeben")
End Try
End Sub
End Module
Listing 4.32 Projekt »KonsoleEinAus«, Eingabe einer Zahl
Zur Erläuterung:
- Es soll eine Zahl eingegeben werden. Bei der Umwandlung der eingegebenen Zeichenkette in eine Zahl kann eine Ausnahme auftreten, daher wird mit einer Ausnahmebehandlung gearbeitet.
- Der Rückgabewert der Methode ReadLine() wird mithilfe der Methode ToDouble() der Klasse Convert in eine double-Zahl verwandelt. Falls dies nicht gelingt, erscheint eine entsprechende Fehlermeldung.
- Falls es sich um eine ganze Zahl handeln soll, muss die Methode ToInt32() statt der Methode ToDouble() genutzt werden.
Nachfolgend die Ausgabe nach einer richtigen Eingabe:
. . .
Bitte eine Zahl eingeben: 2,4
Es wurde die Zahl 2,4 eingegeben
Drücken Sie eine beliebige Taste . . .
Es folgt die Ausgabe nach einer falschen Eingabe:
. . .
Bitte eine Zahl eingeben: 123abc
Es wurde keine Zahl eingegeben
Drücken Sie eine beliebige Taste . . .
4.9.4 Erfolgreiche Eingabe einer Zahl
Im nachfolgenden Programmteil wird der Benutzer solange aufgefordert, eine ganze Zahl einzugeben, bis dies erfolgreich war. Die Methode Main() des Projekts KonsoleEinAus wird um weiteren Programmcode ergänzt:
Module Module1
Sub Main()
Dim a As Integer
. . .
Console.WriteLine()
Do
Try
Console.Write(
"Bitte eine ganze Zahl eingeben: ")
a = Convert.ToInt32(Console.ReadLine())
Exit Do
Catch
Console.WriteLine(
"Fehler, bitte noch einmal")
End Try
Loop
Console.WriteLine("Es wurde die ganze Zahl " &
a & " eingegeben")
End Sub
End Module
Listing 4.33 Projekt »KonsoleEinAus«, wiederholte Eingabe
Zur Erläuterung:
- Die Ausnahmebehandlung für die Eingabe einer ganzen Zahl ist zusätzlich in eine endlose Do-Loop-Schleife eingebettet.
- Falls die Eingabe erfolgreich war, so wird diese Schleife mithilfe von Exit Do verlassen.
- Falls die Eingabe nicht erfolgreich war, wird ein Fehler gemeldet und es ist eine erneute Eingabe erforderlich.
Nachfolgend die Ausgabe mit zwei falschen und einer richtigen Eingabe:
. . .
Bitte eine ganze Zahl eingeben: 123abc
Fehler, bitte noch einmal
Bitte eine ganze Zahl eingeben: 2,4
Fehler, bitte noch einmal
Bitte eine ganze Zahl eingeben: 5
Es wurde die ganze Zahl 5 eingegeben
Drücken Sie eine beliebige Taste . . .
Hinweis: Sie können eine Konsolenanwendung mit der Tastenkombination + vorzeitig abbrechen.
4.9.5 Ausgabe formatieren
Die Ausgabe eines Konsolenprogramms kann formatiert werden. Dies ist vor allem bei der Ausgabe von Tabellen wichtig. Ein Beispiel, im Projekt KonsoleFormat:
Module Module1
Sub Main()
Dim i As Integer
Dim stadt() As String = {"München", "Berlin",
"Bonn", "Bremerhaven", "Ulm"}
For i = 0 To 4
Console.WriteLine(
"{0,-15}{1,9:0.0000}{2,12:#,##0.0}",
stadt(i), i / 7, i * 10000.0 / 7)
Next i
End Sub
End Module
Listing 4.34 Projekt »KonsoleFormat«
Zur Erläuterung:
- Die überladene Ausgabemethode WriteLine() kann mit einer Formatierungszeichenkette als erstem Parameter aufgerufen werden.
Darin steht:
- die Nummer der Variablen, beginnend mit 0
- ein Doppelpunkt
- die zugehörige Formatierung
- {0,-15}: Als Erstes wird eine Zeichenkette ausgegeben, in der Mindestgesamtbreite 15. Sie erscheint linksbündig, wegen des Minuszeichens vor der 15.
- {1,9:0.0000}: Es folgt eine Zahl, in der Mindestgesamtbreite 9, gerundet auf vier Nachkommastellen. Sie erscheint rechtsbündig, dies ist der Standard.
- {2,12:#,##0.0}: Als Letztes folgt wiederum eine Zahl, in der Mindestgesamtbreite 12, gerundet auf eine Nachkommastelle, rechtsbündig. Falls die Zahl mehr als drei Stellen vor dem Komma hat, so wird ein Tausenderpunkt angezeigt.
- Zur Erinnerung: das Formatierungszeichen 0 steht für eine Ziffer, die auf jeden Fall angezeigt wird, das Formatierungszeichen # steht für eine Ziffer, die nur dann angezeigt wird, falls die Zahl diese Ziffer hat.
Die Ausgabe des Programms:
München 0,0000 0,0
Berlin 0,1429 1.428,6
Bonn 0,2857 2.857,1
Bremerhaven 0,4286 4.285,7
Ulm 0,5714 5.714,3
4.9.6 Aufruf von der Kommandozeile
Jede Anwendung lässt sich durch Eingabe des Namens auch von der Kommandozeile aus aufrufen. Besonders bei Konsolen-Anwendungen kommt es vor, dass man dabei die Anwendung mit Startparametern aufruft.
Diese Parameter können dazu dienen, eine Anwendung auf unterschiedliche Arten aufzurufen, ohne dass dazu der Code geändert werden muss. Ein Parameter könnte z. B. der Name einer Datei sein, die geöffnet und gelesen werden soll, falls es bei jedem Aufruf der Anwendung eine andere Datei sein soll.
Die Übernahme der Startparameter in die Anwendung soll mithilfe des Projekts KonsoleStartparameter verdeutlicht werden:
Module Module1
Sub Main(args() As String)
Dim i As Integer
Dim summe As Double = 0
For i = 0 To args.Length – 1
Console.WriteLine(i & ": " & args(i))
Next
For i = 0 To args.Length – 1
Try
summe += Convert.ToDouble(args(i))
Catch
End Try
Next
Console.WriteLine("Summe: " & summe)
End Sub
End Module
Listing 4.35 Projekt »KonsoleStartparameter«
Zur Erläuterung:
- Die einzelnen Startparameter sind Zeichenketten, sie werden bei einem Aufruf im Datenfeld args gespeichert.
- Die erste For-Schleife dient zur einfachen Ausgabe der Startparameter.
- Die zweite For-Schleife soll verdeutlichen, dass die Startparameter auch Zahlen sein können. Sie werden in diesem Falle einfach nur summiert.
Falls Sie diese Anwendung mit der Taste aus der Entwicklungsumgebung heraus aufrufen, so werden keine Startparameter mitgeliefert. Allerdings ist der einmalige Aufruf notwendig, da Ihnen ansonsten keine aufrufbare exe-Datei zur Verfügung steht.
Daher müssen Sie sie von der Kommandozeile aus aufrufen. Unter Windows 7 gehen Sie dazu z. B. wie folgt vor:
- Rufen Sie im Startmenü den Menüpunkt Zubehör • Eingabeaufforderung auf.
- Normalerweise befinden Sie sich dann im Verzeichnis C:\Users\[Benutzername]. Falls nicht, dann geben Sie ein:
- cd\Users\[Benutzername]
- Anschließend gehen Sie zu dem Verzeichnis, in dem die exe-Datei der Anwendung steht:
- cd "Eigene Dateien"/"Visual Studio 2012"/Projects/KonsoleStartparameter/KonsoleStartparameter/bin/Debug
Nun können Sie die Anwendung aufrufen, z. B. mit:
KonsoleStartparameter 3 2,5 hallo 7
Es erscheint die Ausgabe:
0: 3
1: 2,5
2: hallo
3: 7
Summe: 12,5
Die Zeichenkette hallo wurde nur ausgegeben und bei der Summenbildung ignoriert. Sie können anschließend das Kommandozeilenfenster ordnungsgemäß durch die Eingabe von exit schließen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.