Обработать строку и разбить её на команды и аргументы, по правилам CMD - C#

Узнай цену своей работы

Формулировка задачи:

Проблема:

Нужно обработать строку и разбить её на команды и аргументы, по правилам CMD, то есть из строки 'echo hello' Программа должна определить команду 'echo' и параметр 'hello' Но проблема не в этой строке. Проблема в строках типа 'copy "C:\Program Files\бла" "D:\Programs\бла"' (То есть чтобы в параметры можно было передавать пробелы, как это реализовано в cmd)

З.Ы.:

Вангую что будут танцы с Regex, но не знаю как танцевать написать, так что спасайте. Вот.

Решение задачи: «Обработать строку и разбить её на команды и аргументы, по правилам CMD»

textual
Листинг программы
  1.         public IEnumerable<string> GetTokens(string str)
  2.         {
  3.             var token = new StringBuilder();
  4.             var inQuotas = false;
  5.  
  6.             foreach (char c in str)
  7.             {
  8.                 switch(c)
  9.                 {
  10.                     case '"':
  11.                         if (token.Length > 0)
  12.                             yield return token.ToString();
  13.                         token.Clear();
  14.                         inQuotas = !inQuotas;
  15.                         break;
  16.                     case ' ':
  17.                         if (!inQuotas)
  18.                         {
  19.                             if (token.Length > 0)
  20.                                 yield return token.ToString();
  21.                             token.Clear();
  22.                             break;
  23.                         }
  24.                         goto default;
  25.                     default:
  26.                         token.Append(c);
  27.                         break;
  28.                 }
  29.             }
  30.  
  31.             if (token.Length > 0)
  32.                 yield return token.ToString();
  33.         }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут