/// <summary> /// Получение элементов расписания из ячейки. /// </summary> /// <param name="schedule">Экземпляр расписания.</param> /// <param name="studentGroup">Учебная группа.</param> /// <param name="scheduleWeekDay">День недели.</param> /// <param name="scheduleWeekType">Тип недели.</param> /// <param name="pairNum">Номер пары.</param> /// <param name="scheduleItemRaw">Подготовленные данные из ячейки расписниая.</param> /// <returns>Массив экземпляров расписания. Массив, потому что в одной ячейке может быть несколько элементов (разные подгруппы).</returns> public static ScheduleItem[] ParseFromRawData(Schedule schedule, StudentGroup studentGroup, ScheduleWeekDay scheduleWeekDay, ScheduleWeekType scheduleWeekType, int pairNum, string scheduleItemRaw) { var scheduleItemCleanupRegex = new Regex(@"\s*\|\s*"); var auditoryRegex = new Regex(@"^([1-6]-|3_).*$"); var scheduleItems = new List <ScheduleItem>(); if (string.IsNullOrEmpty(scheduleItemRaw) || scheduleItemRaw == "_") { return(scheduleItems.ToArray()); } scheduleItemRaw = scheduleItemCleanupRegex.Replace(scheduleItemRaw, "|"); var scheduleItemElements = scheduleItemRaw.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); string currentDiscipline = null; bool lastItemWasDiscipline = false; foreach (var scheduleItemElement in scheduleItemElements) { var lastItemElement = scheduleItemElement.Split(' ').Last(); if (auditoryRegex.IsMatch(lastItemElement)) { // second string lastItemWasDiscipline = false; string auditory = lastItemElement; string teacher = ""; if (auditory.Length != scheduleItemElement.Length) { teacher = scheduleItemElement.Substring(0, scheduleItemElement.Length - auditory.Length - 1).Trim(); } scheduleItems.Add(new ScheduleItem() { Schedule = schedule, StudentGroup = studentGroup, PairNum = pairNum, WeekDay = scheduleWeekDay, WeekType = scheduleWeekType, RawData = scheduleItemRaw, Discipline = currentDiscipline, Auditory = auditory, Teacher = teacher }); } else { // first string if (lastItemWasDiscipline) { throw new UnexpectedPairStringException(); } currentDiscipline = scheduleItemElement; lastItemWasDiscipline = true; } } if (lastItemWasDiscipline) { // TODO: fix this issue //throw new UnexpectedPairStringException(); } return(scheduleItems.ToArray()); }