private static bool Parse(string input, out string command, out CommandPart[] args, bool ParseCommand = false) { int startPos = 0; int endPos = 0; int inputLength = input.Length; List<CommandPart> argList = new List<CommandPart>(); command = null; args = null; if (input == "") return false; bool parseCommand = ParseCommand; while(endPos < inputLength) { char currentChar = input[endPos++]; switch(parseCommand) { case true: if (currentChar == ' ' || endPos == inputLength) { int length = (currentChar == ' ' ? endPos - 1 : endPos) - startPos; string temp = input.Substring(startPos, length); if (temp != "") { command = temp; parseCommand = false; } startPos = endPos; } break; case false: if(currentChar == ' ' || endPos == inputLength) { int length = (currentChar == ' ' ? endPos - 1 : endPos) - startPos; string temp = input.Substring(startPos, length); if (temp != "") argList.Add(new CommandPart(temp, startPos)); startPos = endPos; } break; } } if (parseCommand && (command == null || command == String.Empty)) return false; args = argList.ToArray(); return true; }
public static bool ParseArgs(string input, out CommandPart[] args) { string ignored; return Parse(input, out ignored, out args); }