Обработать строку и разбить её на команды и аргументы, по правилам 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();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5