Не получается сделать метод ReadQuotedField, который возвращает Token

Сама задача: https://ulearn.me/course/basicprogramming/Praktika_Polya_v_kavychkakh__7a098f71-f436-436f-92ed-287d7b1bca3c Иллюстрация поясняющая семантику свойств класса Token при анализе текста: Иллюстрация поясняющая семантику свойств класса 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, объяснение выше на иллюстрации

Уже почти неделю мучаюсь, не получается понять, как это сделать, пробовал и на английском искать, не получается реализовать данный метод. ПРОШУ! Помогите, хочу разобраться в данной задаче.


Ответы (0 шт):