Улучшить код разбора аргументов - C#

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

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

Разрабатываю программу, и не хочу использовать костыли и говнокод, но делая одну функцию я встал в тупик:
Листинг программы
  1. public static string[] ParseArgs (string full)
  2. {
  3. if(!full.Contains(" "))
  4. throw new ArgumentException("Args not found", "full");
  5. var args = new Dictionary<int, string>();
  6. var chars = full.ToCharArray();
  7. bool nospace=false;
  8. int index=0;
  9. for(int i=0; i<chars.Length; i++)
  10. {
  11. var ch = chars[i];
  12. if(ch==' ' && !nospace)
  13. index++;
  14. else if(ch=='"')
  15. nospace=!nospace;
  16. else
  17. args[index]+=ch;
  18. }
  19. if(nospace)
  20. throw new Exception("You must close the quotation marks");
  21. var resp = string[args.Count];
  22. for(int i=0; i<args.Count; i++)
  23. {
  24. resp[i] = args[i];
  25. }
  26. return resp;
  27. }
Функция парсит строку типа: command "argument1 and spaces" argument2 3 И возвращает массив: "command", "argument1 and spaces", "argument2", "3" Как можно оптимизировать этот код?

Решение задачи: «Улучшить код разбора аргументов»

textual
Листинг программы
  1. using Microsoft.VisualBasic.FileIO;
  2.  
  3. string rawCmd = "command "argument1 and spaces" argument2 3";
  4. using (StringReader sr = new StringReader(rawCmd))
  5. using (TextFieldParser parser = new TextFieldParser(sr))
  6. {
  7.     parser.Delimiters = new string[] { " " };
  8.     string[] tokens = parser.ReadFields();
  9.     foreach (var s in tokens) Console.WriteLine(s);
  10. }

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


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

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

14   голосов , оценка 3.786 из 5

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

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

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