Обработать строку и разбить её на команды и аргументы, по правилам CMD - C#
Формулировка задачи:
Проблема:
Нужно обработать строку и разбить её на команды и аргументы, по правилам CMD, то есть из строки 'echo hello' Программа должна определить команду 'echo' и параметр 'hello' Но проблема не в этой строке. Проблема в строках типа 'copy "C:\Program Files\бла" "D:\Programs\бла"' (То есть чтобы в параметры можно было передавать пробелы, как это реализовано в cmd)З.Ы.:
Вангую что будут танцы с Regex, но не знаю какРешение задачи: «Обработать строку и разбить её на команды и аргументы, по правилам CMD»
textual
Листинг программы
public IEnumerable<string> GetTokens(string str)
{
var token = new StringBuilder();
var inQuotas = false;
foreach (char c in str)
{
switch(c)
{
case '"':
if (token.Length > 0)
yield return token.ToString();
token.Clear();
inQuotas = !inQuotas;
break;
case ' ':
if (!inQuotas)
{
if (token.Length > 0)
yield return token.ToString();
token.Clear();
break;
}
goto default;
default:
token.Append(c);
break;
}
}
if (token.Length > 0)
yield return token.ToString();
}