Улучшить код разбора аргументов - C#
Формулировка задачи:
Разрабатываю программу, и не хочу использовать костыли и говнокод, но делая одну функцию я встал в тупик:
Функция парсит строку типа: command "argument1 and spaces" argument2 3
И возвращает массив: "command", "argument1 and spaces", "argument2", "3"
Как можно оптимизировать этот код?
Листинг программы
- 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;
- }
Решение задачи: «Улучшить код разбора аргументов»
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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д