Не получается сделать метод ReadQuotedField, который возвращает Token
Сама задача: https://ulearn.me/course/basicprogramming/Praktika_Polya_v_kavychkakh__7a098f71-f436-436f-92ed-287d7b1bca3c
Иллюстрация поясняющая семантику свойств класса Token при анализе текста:
Суть в том, что у меня не получается сделать метод ReadQuotedField. Я только сделал код для получения массива полей в кавычках, а что дальше делать не понимаю, т.к. надо еще Position найти:
using System;
using System.Text;
using NUnit.Framework;
namespace TableParser
{
[TestFixture]
public class QuotedFieldTaskTests
{
[TestCase("''", 0, "", 2)]
[TestCase("'a'", 0, "a", 3)]
[TestCase("\"abc\"", 0, "abc", 5)]
[TestCase("b \"a'\"", 2, "a'", 4)]
[TestCase(@"'a\' b'", 0, "a' b", 7)]
public void Test(string line, int startIndex, string expectedValue, int expectedLength)
{
var actualToken = QuotedFieldTask.ReadQuotedField(line, startIndex);
Assert.AreEqual(new Token(expectedValue, startIndex, expectedLength), actualToken);
}
}
class QuotedFieldTask
{
public static Token ReadQuotedField(string line, int startIndex)
{
//hello world
char[] parmChars = line.ToCharArray();
bool inDoubleQuote = false;
bool inSingleQuote = false;
for (var index = 0; index < parmChars.Length; index++)
{
if (parmChars[index] == '\"' && !inSingleQuote)
{
inDoubleQuote = !inDoubleQuote;
int endIndexDoubleQuote = index;
parmChars[index] = '\n';
}
if (parmChars[index] == '\'' && !inDoubleQuote)
{
inSingleQuote = !inSingleQuote;
int endIndexSingleQuote = index;
parmChars[index] = '\n';
}
if (!inSingleQuote && !inDoubleQuote && parmChars[index] == ' ')
{
parmChars[index] = '\n';
int endWithoutQuote = index;
}
}
string[] strings = (new string(parmChars)).Split(new[] { '\n' },
StringSplitOptions.RemoveEmptyEntries);
return new Token(strings[1], startIndex, line.Length - startIndex);
}
}
}
Пример: [TestCase("hello world", new[] { "hello", "world" })] Должны быть данные Position, Length, Value для двух значений hello и world, объяснение выше на иллюстрации
Уже почти неделю мучаюсь, не получается понять, как это сделать, пробовал и на английском искать, не получается реализовать данный метод. ПРОШУ! Помогите, хочу разобраться в данной задаче.