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

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

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

Разрабатываю программу, и не хочу использовать костыли и говнокод, но делая одну функцию я встал в тупик:
public static string[] ParseArgs (string full)
        {
            if(!full.Contains(" "))
                throw new ArgumentException("Args not found", "full");
            var args = new Dictionary<int, string>();
            var chars = full.ToCharArray();
            bool nospace=false;
            int index=0;
            for(int i=0; i<chars.Length; i++)
            {
                var ch = chars[i];
                if(ch==' ' && !nospace)
                    index++;
                else if(ch=='"')
                    nospace=!nospace;
                else
                    args[index]+=ch;
            }
            if(nospace)
                throw new Exception("You must close the quotation marks");
            var resp = string[args.Count];
            for(int i=0; i<args.Count; i++)
            {
                resp[i] = args[i];
            }
            return resp;
        }
Функция парсит строку типа: command "argument1 and spaces" argument2 3 И возвращает массив: "command", "argument1 and spaces", "argument2", "3" Как можно оптимизировать этот код?

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

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

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


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

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

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