Esempio n. 1
0
 public bool Trigger(DateTime when)
 {
     if ((WeekDays.Contains(when.DayOfWeek) || WeekDays.Count == 0) && when.Hour == Time.Hour && when.Minute == Time.Minute && when.Second == Time.Second)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 2
0
        public bool Trigger(DateTime when)
        {
            int beginSeconds = BeginTime.Hour * 60 * 60 + BeginTime.Minute * 60 + BeginTime.Second;
            int endSeconds   = EndTime.Hour * 60 * 60 + EndTime.Minute * 60 + EndTime.Second;
            int totalSeconds = when.Hour * 60 * 60 + when.Minute * 60 + when.Second;

            //不在限制范围内的,直接跳过
            if (totalSeconds < beginSeconds || totalSeconds > endSeconds)
            {
                return(false);
            }
            if ((WeekDays.Contains(when.DayOfWeek) || WeekDays.Count == 0) && totalSeconds % this.Seconds == 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 3
0
 public static bool IsWeekDay(this EDaysOfWeekExt dayOfWeek)
 {
     return(WeekDays.Contains(dayOfWeek));
 }
        private void ExtractPartTime(string file)
        {
            Workbook wb = excelApp.Workbooks.Open(file, 0, true);

            foreach (Worksheet ws in wb.Worksheets)
            {
                Range dCell = ws.Cells[4, "A"];
                Range vCell = ws.Cells[5, "B"];
                if (vCell.Text == "")
                {
                    vCell = ws.Cells[vCell.Row + 1, vCell.Column];
                }

                string   pattern = @"\s+";
                Regex    reg     = new Regex(pattern);
                string[] date    = reg.Replace(dCell.Text.Trim(), " ").Split();
                while (WeekDays.Contains(date[0].ToLower()))
                {
                    Range gCell = ws.Cells[3, "C"];
                    while (gCell.Text != "")
                    {
                        Range zCell = ws.Cells[vCell.Row - 1, gCell.Column];
                        Range pCell = ws.Cells[vCell.Row, gCell.Column];
                        if (zCell.Text != "")
                        {
                            try
                            {
                                int i = Data.Count;
                                Data.Add(new string[11]);
                                string[] wsName = reg.Replace(ws.Name.Trim(), " ").Split();

                                Data[i][0] = "Очно-заочная " + wsName[2].Substring(1, wsName[2].Length - 2);
                                Data[i][1] = wsName[0];
                                int month = 0;
                                for (; month < Months.Length; month++)
                                {
                                    if (date[2].Replace(",", "").ToLower() == Months[month] || date[2].Replace(",", "").ToLower() == MonthsRod[month])
                                    {
                                        break;
                                    }
                                }
                                DateTime moment = DateTime.Now;
                                Data[i][2] = date[1] + "." + (++month).ToString() + "." + moment.Year;
                                Data[i][3] = vCell.Text.Split('-')[0].Trim().Replace('.', ':');
                                Data[i][4] = reg.Replace(gCell.Text.Trim(), " ").Split('(')[0].Trim();
                                Data[i][5] = zCell.Text.ToLower().Replace("экзамен", "").Trim().ToLower();
                                string[] help = reg.Replace(pCell.Text.Trim(), " ").Split();
                                Data[i][6] = help[0] + " " + help[1];
                                help       = reg.Replace(pCell.Text.Trim(), " ").Split('(')[1].Split(',');
                                Data[i][7] = help[0].Replace("ауд.", "").Trim();
                                Data[i][8] = help[1].Replace("к.", "").Replace(")", "").Trim();
                                Data[i][9] = "0";

                                if (zCell.Font.Underline == 2)
                                {
                                    Data[i][10] = "Экзамен";
                                }
                                else if (zCell.MergeCells)
                                {
                                    Data[i][10] = "Лекция";
                                }
                                else
                                {
                                    Data[i][10] = "Семинар";
                                }
                            }

                            catch
                            {
                                string error = "";
                                for (int i = 0; i < 5; i++)
                                {
                                    error += Data.Last()[i] + " ";
                                }
                                error += zCell.Text + " " + pCell.Text;
                                Troubles.Add(error);
                                Data.Remove(Data.Last());
                            }
                        }
                        gCell = ws.Cells[gCell.Row, zCell.MergeArea.Column + zCell.MergeArea.Count];
                    }
                    vCell = ws.Cells[vCell.Row + 2, vCell.Column];
                    if (Int32.TryParse(vCell.Text, out int _))
                    {
                        vCell = ws.Cells[vCell.Row + 1, vCell.Column];
                    }
                    if (dCell.MergeArea.Count + dCell.Row - 1 < vCell.Row)
                    {
                        dCell = ws.Cells[vCell.Row - 1, dCell.Column];
                        if (dCell.Text == "" && vCell.Text != "")
                        {
                            dCell = ws.Cells[vCell.Row, dCell.Column];
                        }
                        date = reg.Replace(dCell.Text.Trim(), " ").Split();
                    }
                }
            }
        }
        private void ExtractBacalavr(string filePath)
        {
            Workbook wb = excelApp.Workbooks.Open(filePath, 0, true);

            foreach (Worksheet ws in wb.Worksheets)
            {
                string[] partpath = filePath.Split('\\');
                string[] arr_file = partpath[partpath.Length - 1].ToLower().Split(); // набор слов из названия для дальнейшего определения типа обработки

                // объявление начальных значений ячеек с информацией о курсе, дате и времени
                Range courseCell = ws.Cells[2, "A"];
                Range dateCell   = ws.Cells[4, "A"];
                Range timeCell   = ws.Cells[4, "B"];

                string[] date = dateCell.Text.ToString().Split(); // в ячейке с датой хранится название дня недели и собственно дата

                while (WeekDays.Contains(date[0].ToLower()))
                {
                    Range groupCell = ws.Cells[3, "C"]; // ячейка с информацией о группе
                    while (groupCell.Text != "")
                    {
                        Range lessonCell = ws.Cells[timeCell.Row, groupCell.Column]; // ячейка с информацией о занятии
                        if (lessonCell.Text != "")
                        {
                            // Ячейки с информацией о занятии может быть нестандартной,
                            // поэтому при любом исключении в секции чтения данных оттуда
                            // следует считать, что нарушена структура ячейки в исходном файле
                            // В таком случае нужно сохранить данные об этом занятии отдельно,
                            // чтобы была возможность их отдельно обработать с участием пользователя
                            try
                            {
                                int i = Data.Count;
                                Data.Add(new string[11]);
                                Data[i][0] = "Бакалавриат";
                                Data[i][1] = courseCell.Text.ToString().Split()[0]; // в ячейке хранится информация вида "2 курс", поэтому выбирается только первое слово
                                Data[i][2] = date[1];

                                string pattern  = @"\n\s*\n"; // патерн для пустых строк
                                string pattern2 = @"\s+";     // паттерн для 2-х и более пробельных символов
                                Regex  reg      = new Regex(pattern);
                                Regex  reg2     = new Regex(pattern2);

                                // в ячейке с информацией о времени содержится также номер занятия
                                // Номер занятия отделяется от времени пустой строкой
                                // Время указано в виде "время начала - время конца"
                                // Для приложения нужно только время начала
                                // Также часы и минуты могут разделяться двоеточием или точкой
                                // Необходимо привести к единому виду
                                Data[i][3] = reg.Replace(timeCell.Text, "\n").Split('\n')[1].Split('-')[0].Trim().Replace('.', ':');

                                Data[i][4] = groupCell.Text.Trim();

                                // В ячейке с информацией о занятиях хранятся данные в следующей структуре
                                // дисциплина1\n\nпреподаватель1 (аудитория1\[корпус1\][, подгруппа1])
                                // [\nпреподаватель2 (аудитория2\[корпус2\][, подгруппа2])]
                                // [\nдисциплина2\n\nпреподаватель3 (аудитория3\[корпус3\][, подгруппа3])
                                // [\nпреподаватель4 (аудитория4\[корпус4\][, подгруппа4])]]
                                // Символами [ ] обозначены необязательные элементы,
                                // а \[ \] - реально присутствующие в тексте ячейки скобки

                                // Уничтожение лишних строк и разделение по строкам
                                string[] lessonLines = reg.Replace(lessonCell.Text.Trim(), "\n").Split('\n');

                                // Если строка точно нестандартная - выбросить исключение для перехода в обработчик
                                if (lessonLines.Length == 1)
                                {
                                    throw new Exception();
                                }
                                // TODO: Переписать блоки для занятий и для сессии в один блок
                                else if (arr_file[1] == "занятий") // для файлов с обычными занятиями
                                {
                                    for (int n = 0, m = 1; m < lessonLines.Length; n += 2, m += 2)
                                    {
                                        if (n > 0)
                                        {
                                            i = Data.Count;
                                            Data.Add((string[])Data.Last().Clone());
                                            Data[i][10] = null;
                                        }
                                        lessonLines[m] = reg2.Replace(lessonLines[m], " ");

                                        string[] help = lessonLines[n].Split('(');
                                        Data[i][5] = help[0].Trim().ToLower();
                                        if (help.Length > 1)
                                        {
                                            Data[i][10] = "Лекция";
                                        }

                                        help       = lessonLines[m].Split();
                                        Data[i][6] = help[0].Trim() + " " + help[1].Trim();
                                        help       = lessonLines[m].Split('(', '[', ',', ')', ']');
                                        Data[i][7] = help[1].Trim();
                                        Data[i][8] = help[2].Trim();
                                        if (help.Length > 5)
                                        {
                                            Data[i][9] = help[4].Trim();
                                        }
                                        else
                                        {
                                            Data[i][9] = "0";
                                        }
                                        if (Data[i][10] != null)
                                        {
                                        }
                                        else if (lessonCell.MergeCells || lessonCell.Font.Underline == 2)
                                        {
                                            Data[i][10] = "Лекция";
                                        }
                                        else if (Data[i][9] == "0")
                                        {
                                            Data[i][10] = "Семинар";
                                        }
                                        else
                                        {
                                            Data[i][10] = "Практика";
                                        }
                                    }
                                }

                                else
                                {
                                    string[] help = lessonLines[0].Split('(')[0].Split();
                                    for (int j = 0; j < help.Length; j++)
                                    {
                                        if (help[j].ToLower() != "экзамен")
                                        {
                                            Data[i][5] += " " + help[j];
                                        }
                                    }
                                    Data[i][5]  = Data[i][5].Trim().ToLower();
                                    Data[i][10] = "ЭКЗАМЕН";

                                    for (int m = 1; m < lessonLines.Length; m++)
                                    {
                                        if (m > 1)
                                        {
                                            i = Data.Count;
                                            Data.Add((string[])Data.Last().Clone());
                                        }
                                        if (lessonLines[m].ToLower().Contains("экзамен"))
                                        {
                                            string[] strs = lessonLines[m].Split('(')[0].Split();
                                            for (int j = 0; j < strs.Length; j++)
                                            {
                                                if (strs[j].ToLower() != "экзамен")
                                                {
                                                    Data[i][5] += " " + strs[j];
                                                }
                                            }

                                            m++;
                                        }
                                        lessonLines[m] = reg2.Replace(lessonLines[m], " ");

                                        string[] profinfo = lessonLines[m].Split(',');
                                        help       = lessonLines[m].Split('(', '[', ']');
                                        Data[i][7] = help[1].Trim();
                                        Data[i][8] = help[2].Trim();

                                        if (help.Last() != ")")
                                        {
                                            Data[i][9] = help.Last().Trim().Substring(1, help.Last().Trim().Length - 2).Trim();
                                        }
                                        else
                                        {
                                            Data[i][9] = "0";
                                        }
                                        for (int p = 0; p < profinfo.Length; p++)
                                        {
                                            if (profinfo[p].Trim().Split(')')[0].Length == 1)
                                            {
                                                break;
                                            }
                                            if (p > 0)
                                            {
                                                i = Data.Count;
                                                Data.Add((string[])Data.Last().Clone());
                                            }

                                            help       = profinfo[p].Trim().Split();
                                            Data[i][6] = help[0].Trim() + " " + help[1].Trim();
                                        }
                                    }
                                }
                            }
                            catch
                            {
                                string error = "";
                                for (int i = 0; i < 5; i++)
                                {
                                    error += Data.Last()[i] + " ";
                                }
                                error += lessonCell.Text;
                                Troubles.Add(error);
                                Data.Remove(Data.Last());
                            }
                        }

                        groupCell = ws.Cells[groupCell.Row, lessonCell.MergeArea.Column + lessonCell.MergeArea.Count];
                    }
                    timeCell = ws.Cells[timeCell.Row + 1, timeCell.Column];
                    if (dateCell.MergeArea.Count + dateCell.Row - 1 < timeCell.Row)
                    {
                        dateCell = ws.Cells[dateCell.Row + dateCell.MergeArea.Count, dateCell.Column];
                        date     = dateCell.Text.ToString().Split();
                    }
                }
            }
            wb.Close();
        }