Пример #1
0
        /// <summary>
        /// Считывание разбивки на режимы (используется для формирования R-file) из xlsx файла формата 9.41-сц2
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public override List <KadrIntervals> KadrIntervalsReadFromExcel(string filename)
        {
            //считываем данные из Excel файла в двумерный массив
            Excel.Application xlApp = new Excel.Application(); //Excel
            Excel.Workbook    xlWB;                            //рабочая книга
            Excel.Worksheet   xlSht;                           //лист Excel
            xlWB = xlApp.Workbooks.Open(filename);             //название файла Excel
            int NShts = xlWB.Worksheets.Count;
            List <KadrIntervals> KadrIntervalsList = new List <KadrIntervals>();

            try
            {
                foreach (Excel.Worksheet sheet in xlWB.Worksheets)
                {
                    int           iLastRow      = sheet.Cells[sheet.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;
                    var           arrData       = (object[, ])sheet.Range["A5:H" + iLastRow].Value; //берём данные с листа Excel
                    KadrIntervals kadrIntervals = new KadrIntervals();


                    List <KadrInterval> intervals = new List <KadrInterval>();
                    //заполняем intervals данными из массива
                    int i;
                    for (i = 1; i <= arrData.GetUpperBound(0); i++)
                    {
                        double t    = (double)arrData[i, 1] * 3_600_000 * 24;
                        long   tbeg = (long)t;
                        double te   = t + 3_600_000 * 24;
                        if (i != arrData.GetUpperBound(0))
                        {
                            te = (double)arrData[i + 1, 1] * 3_600_000 * 24;
                        }
                        long     tend  = (long)te;
                        string[] kadrs = new string[arrData.GetUpperBound(1) - 1];
                        int      j;
                        for (j = 2; j <= arrData.GetUpperBound(1); j++)
                        {
                            kadrs[j - 2] = (string)arrData[i, j];
                        }

                        KadrInterval I = new KadrInterval(kadrs,
                                                          tbeg,
                                                          tend);
                        intervals.Add(I);
                    }
                    kadrIntervals.Intervals = intervals;
                    kadrIntervals.Id        = sheet.Cells[2, "H"].Value.ToString();

                    kadrIntervals.tags = new List <string>();
                    var arrDataTags = (object[, ])sheet.Range["A2:H2"].Value;
                    for (i = 1; i <= 8; i++)
                    {
                        if (arrDataTags[1, i] != null)
                        {
                            kadrIntervals.tags.Add(arrDataTags[1, i].ToString());
                        }
                    }

                    kadrIntervals.filename = "NONE!";
                    KadrIntervalsList.Add(kadrIntervals);
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("SpecialFor9_41_SCENARY4.KadrIntervalsReadFromExcel -  Ошибка считывания файла " + filename + "  :   " + e.Message + "    Stacktrace:" + e.StackTrace);
            }
            finally
            {
                xlWB.Close(false); //закрываем книгу, изменения не сохраняем
                xlApp.Quit();      //закрываем Excel
            }


            return(KadrIntervalsList);
        }
Пример #2
0
        /// <summary>
        /// По моему это бесполезно комментировать....
        /// Короче тут происходит самое основное - вроде как смотрится каждая строка, потом выясняется в каком она кадре
        /// Потом .... вобщем ей назначается одна только зона в результате....
        /// </summary>
        /// <param name="tobiiRecords"></param>
        /// <param name="kadrIntervals"></param>
        /// <param name="tabOfKeys"></param>
        /// <returns></returns>
        public List <TobiiRecord> Calculate(List <TobiiRecord> tobiiRecords, KadrIntervals kadrIntervals, TabOfKeys tabOfKeys)
        {
            // FZoneList = new List<TobiiRecord>();
            foreach (var TR in tobiiRecords)//проходим по всем записям
            {
                foreach (var zone in TR.zones)
                {
                    int    MFINumber;
                    string kadr;
                    int    Fzone;
                    MFINumber = SpecialFor9_41_SCENARY2.GetMFINumber(zone);
                    kadr      = kadrIntervals.GetKadr(TR.time_ms, MFINumber);
                    if (kadr == "")
                    {
                        throw new Exception("Не могу найти подходящий кадр для интервала id = " + kadrIntervals.Id + " при времени" + TR.time_ms);
                    }
                    Fzone = tabOfKeys.GetFuncZone(zone, kadr);
                    TR.fzones.Add(Fzone);
                }

                TR.fzones = TR.fzones.Distinct().ToList();

                //Убираем нулевые зоны
                if (TR.fzones.Count() > 1)
                {
                    if (TR.fzones.Contains(0))
                    {
                        TR.fzones.Remove(0);
                    }
                }

                //убираем низкоприоритетные зоны - тут например убрали зоны "кадр БР целиком"
                for (int i = 0; i < 5; i++)
                {
                    if (TR.fzones.Count() > 1)
                    {
                        if (TR.fzones.Contains(18))
                        {
                            TR.fzones.Remove(18);
                        }
                    }

                    if (TR.fzones.Count() > 1)
                    {
                        if (TR.fzones.Contains(19))
                        {
                            TR.fzones.Remove(19);
                        }
                    }

                    if (TR.fzones.Count() > 1)
                    {
                        if (TR.fzones.Contains(20))
                        {
                            TR.fzones.Remove(20);
                        }
                    }
                }
                if (TR.fzones.Count() > 0)
                {
                    TR.CurFZone = TR.fzones.First();
                }

                if (TR.fzones.Count() == 0)
                {
                    TR.CurFZone = -1;
                }
            }
            return(tobiiRecords);
        }