2008-11-25 12 views
19

Wie würde ich nach Eingang für eine Konsolenanwendung in C# suchen?C#: Wie finden Sie Argumente in der Konsolenanwendung eingegeben?

zum Beispiel sagen, lasse ich die Konsolenanwendung wollen durch Schreiben starten: Welcome To Food Hut (Cursor Sachen hier nach der ersten Zeile eingeben)

Ich würde die Konsolenanwendung wollen zwei Befehle erkennen :

1:/help - was einige Hilfe Kauderwelsch anzeigen wird.

2:/essen pizza -t pepperoni -d pepsi - die angezeigt wird "So möchten Sie eine Pizza mit Peperoni und Pepsi zu trinken?"

Wie würde ich weitergehen, wenn ich zuerst wüsste, was/getippt wurde und auch die Argumente wie -t pepperoni (Topping) und -d pepsi (zu trinken) lesen, wenn/Food Pizza getippt wurde?

Mein Hauptproblem ist herauszufinden, wie das erste Wort überhaupt erkannt wird, herauszufinden, dass, wenn es war/Hilfe dann rufen Sie eine Methode, die einige Hilfetext in die Konsole posten würde oder wenn der Befehl ist/Essen dann zu lesen Was ist nach dem Befehl/food, -t und -p?

static void Main(string[] args) 
    { 
     Console.WriteLine("Welcome To Food Hut"); 
     Console.ReadLine(); 

     // if readline equals to /help then display some help text. 


     // if /food command is typed, read first argument after /food Pizza, -t TheTopping 
     // and -p ForWhatToDrink 

     // and then display, 'So you would like a Pizza with Pepperoni and Pepsi to drink?' 
    } 

Antwort

0

Blick in String.Contains

3

Mein unmittelbaren Vorschlag wäre so etwas wie diese:

string input = Console.ReadLine(); 
if (input == "/help") { } 
else if (input.StartsWith("/food")) { } 
else { //... } 

dass Barring, die nächste einfachste Lösung besteht darin, regex. Wenn Sie etwas wirklich Erweiterbares brauchen, können Sie in einen Lexer/Parser schauen.

Aber andererseits sagt mir etwas, dass Sie das Problem falsch angehen. Vielleicht wäre es nur einfacher sein, um ein Menü zu Ihrem Benutzer anzuzeigen, etwa so:

Food: 
1) Tofu 
2) Tempeh 
3) Seitan 
4) Soup 

Choice (1-4)? [users input] 

Drink: 
1) Pepsi 
2) Coffee 
3) Water 
4) Tea 
5) Juice 

Choice (1-5)? [users input] 

Nummerierten Menüs könnten zu verdauen ein wenig einfacher für die Benutzer sein.

0

Paul hat Recht, Sie müssen die verschiedenen String-Mitglieder verwenden, um diese Aufgabe zu erfüllen.

MSDN

Wenn Sie wirklich Unternehmen fühlen, können Sie die String.Text.RegularExpression Klasse buchen, mit dem Text zu analysieren, sondern zu beginnen, verwenden Sie die Zeichenfolge Mitglieder.

Versuchen Sie auch, going C# String-Parsing.

2

Um die Grundlagen der Programmierung zu überspringen, können Sie sich das Genghis project Kommandozeilen-Parsing-Unterprojekt von Chris Sells ansehen. Es ist das erste in der Tabelle auf der verlinkten Seite.

+0

wow, das ist einfach großartig. –

3

Verwenden Sie string.split, um alle Wörter zu finden, die durch ein Leerzeichen getrennt sind.

input = Console.ReadLine(); 
string[] commands = input.Split(' '); 
if(commands[0] == "/food") 
{ 
if(commands[1] == "Pizza"); 
    ..... 
} 
40

Ich empfehle Richard Lopes' Command Line Arguments Parser. Es ist leistungsstark und sehr einfach zu bedienen.Außerdem nimmt es verschiedene Möglichkeiten, die Argumente spezifiziert, zum Beispiel:

  • /name = Stefan
  • --name = Stefan
  • --name = "Mehrere Worte"
  • -name ‚Stefan "

Beispielcode:

static void Main(string[] args) 
{ 
    Arguments cmdline = new Arguments(args); 

    Console.WriteLine(cmdline["name"]); 
} 
+0

Dies ist der einzige Weg! Vielen Dank an Richard Lopes und Stefan Schultze. – PseudoToad

+0

Woher kommt das Argument-Objekt? Mein Befehlszeilenprojekt erkennt es nicht. – theJerm

+0

@theJerm Das ist definitiv alt und Sie werden es wahrscheinlich herausfinden, aber für diejenigen, die es vielleicht nicht wissen ... müssen Sie die Arguments-Klasse aus dem Code-Projektartikel in Stefans Link in Ihr Projekt kopieren, bevor Sie es verwenden können. – fujiiface

-3

Was über diesen Fall:

mssinp.exe -cf "C:\Temp\config.txt" 

der Wert für den Parameter als

[0] 'C' 
[1] '\Temp\config.txt' 
+0

Bitte posten Sie keine Fragen/Notizen als Antworten – rob

0

Stieß auf gsscoder/commandline splited werden. Eine saubere objektorientierte Implementierung, die über NuGet verfügbar ist.

Verwandte Themen