Feedback

C# - Command Line parsen

Veröffentlicht von am 09.12.2013
(0 Bewertungen)
Mit Hilfe dieser Methode kann man eine Befehlszeile in die einzelnen Argumente zerlegen. Dabei wird die Zeichenfolge an jedem Leerzeichen zerlegt. Leerzeichen, die von Anführungszeichen eingeschlossen sind, werden ignoriert.

Hinweis
Für die Ausführungszeile des aktuellen Programms kann man auch einfach Environment.GetCommandLineArgs() aufrufen.

Test-Code
Mit folgendem Code habe ich die Methode getestet.
string[] cmds = new string[]{
"anwendung.exe",
"anwendung.exe /d",
"anwendung.exe /t /d",
"anwendung.exe \"C:\\Neuer Ordner\\test.txt\"",
"anwendung.exe \"C:\\Neuer Ordner\\test.txt\" /d",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\"",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" /b",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" \"C:\\Neuer Ordner\\test.txt\"",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" \"C:\\Neuer Ordner\\test.txt\" /b",
"anwendung.exe /a \"C:\\Neuer Ordner\\test.txt\" /b \"C:\\Neuer Ordner\\test.txt\" /c",
};
foreach (var cmd in cmds)
{
var x = ParseCmdLineArgs(cmd);
Console.WriteLine(cmd);
Console.WriteLine(String.Join(" ", x));
Console.WriteLine();
}
Console.ReadKey();
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) - Komplett 

C# Komplett

Sie kennen sich in objektorientierter Programmierung aus. Sie schreiben C++ oder Java? Und nun stehen Sie vor der Aufgabe, in C# Anwendungen zu erstellen. Das C# Komplett-Seminar verschafft Ihnen umfassende Programmierkenntnisse in dieser Sprache. Nach der Schulung entwickeln Sie selbständig Anwendungen mit C#. Sie kennen die Datentypen und Klassenbibliotheken der objektorientierten Programmiersprache C#. Der Komplettkurs setzt bei den Grundlagen von C# ein. Sie arbeiten mit Variablen und konvertieren Typen. Multithreading, Delegates, Generics sind nach dem Seminar für Sie kein Geheimnis mehr.


/// Analysiert eine Zeichenfolge und zerlegt diese danach in die einzelnen Argumente für die Eingabeaufforderung.
/// </summary>
/// <remarks>
/// Die Zeichenfolge wird bei jedem Leerzeichen auf gesplittet, das nicht zwischen 2 Anführungszeichen steht.
/// </remarks>
/// <param name="cmdLine">Die zu analysierende Zeichenfolge.</param>
/// <returns>Ein Array von Argumenten, die zusammen gesetzt <paramref name="cmdLine"/> ergeben.</returns>
public static string[] ParseCmdLineArgs(string cmdLine)
{
    List<string> result = new List<string>();
    StringBuilder sb = new StringBuilder();
    bool quot = false;
    for (int i = 0; i < cmdLine.Length; ++i)
    {
        switch (cmdLine[i])
        {
            case '"':
                quot = !quot;
                goto default;
            case ' ':
                if (quot)
                    goto default;
                else
                {
                    result.Add(sb.ToString());
                    sb.Clear();
                }
                break;
            default:
                sb.Append(cmdLine[i]);
                break;
        }
    }
    result.Add(sb.ToString());
    return result.ToArray();
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!