C# Как распарсить файл и провести проверку условий?
Нужна помощь. Не могу придумать алгоритм. Вообщем есть текстовый файл, например блокнот, он содержит в себе, к примеру:
x1
x2&x3
x4|x1
Может и другую конструкцию содержать, например:
x1
x2&x3
x4|x1x1
x5&6
x7|x1
x - это пользователи.
Нужно распарсить файл и попросить написать каждого пользователя "Да" либо "Нет". В зависимости от условий, например, если просто в строке x1, то написать пользователю - "Да" или "Нет". Если в строке, как указано выше x2&x3, то написать обоим пользователям, и если они оба написали "Да", вывести "Да", если кто-то написал "нет", то "Нет". И вывести это в итоговый файл, например в виде:
x1 - Да
x2&x3 - Нет
x4|x1 - Да
Сижу долго, не могу придумать. Помогите пожалуйста! Желательно кодом..
- читаете первую строку
- смотрите, есть ли в ней символы "&" или/и "|"
- если нет, то это один пользователь
- если есть, то разбивает эту строку по разделителям String.Split
- в итоге получается список пользователей для первой строки, задаете им вопросы, получаете список ответов
- применяете к ответам логические операции
- дописываете его к первой строке и выводите
Ну вот, читаем строку, проверяем условие, допустим для &. А как их разделить с помощью .split('&') и куда их записывать? В массив? А потом по индексам брать?
holymotion: Для каждой строки: Сначала делаешь Split('|'). Получаешь массив подстрок. Для каждой из подстрок делаешь Split('&'), получаешь "подподмассивы" строк. В каждой строке любого подподмассива лежит имя юзера.
Объединяешь все подподмассивы в словарь<юзер, мнение>, LINQ Distinct() в помощь.
Запрашиваешь мнения всех юзеров из словаря.
Для каждого подподмассива вычисляешь значение (если хоть один юзер вернуд false - значение false).
Для каждого массива вычисляешь значение (если хоть одно подмассивное значение true - значение true).
Ко всему этому потребуется прикрутить частные случаи (когда только один юзер). В принципе, можно попробовать рекурсивно забабахать.
holymotion: Посмотрел коммент выше и ужаснулся.
Напиши несколько методов.
Первый возвращает значение от пользователя.
Второй проверяет, содержит ли строка строка лишь одного юзера (не содержит '&', '|').
Третий возвращает значение из строки, которая не содержит ('|'), но может содержать ('&').
Четвертый метод - существующий String.Split().
Пятый - проверка, что строка не содержит ('|')
Берешь исходную строку, проверяешь вторым методом. Если один юзер - вызываешь первый метод.
Если юзеров много, проверяешь строку на наличие ('|') третьим методом. Если '|' нет (пятый метод) - вызываешь третий метод.
Если же '|' есть - вызываешь Split('|'), получаешь подстроки. Для каждой вызываешь третий метод, результаты логически складываешь.