예제 #1
0
 public TobiiRecord(TobiiRecord TR)
 {
     time_ms  = TR.time_ms;
     zones    = TR.zones;
     fzones   = TR.fzones;
     CurFZone = TR.CurFZone;
 }
예제 #2
0
        public List <TobiiRecord> ReadTxtToTobiiRecordListZones5Hz(string filename)
        {
            List <TobiiRecord> tobiiRecords = new List <TobiiRecord>();

            using (StreamReader rd = new StreamReader(new FileStream(filename, FileMode.Open)))
            {
                char     separator = '\n';
                char     delimiter = '\t';
                string[] str_arr   = { "" };
                string   big_str   = "";
                TobiiCsvReader.ReadPartOfFile(rd, out big_str);
                str_arr = big_str.Split(separator);

                int i = 0;
                for (i = 0; i < str_arr.Length; i++)
                {
                    if (str_arr[i] == "")
                    {
                        continue;
                    }
                    string[] tmp = { "" };
                    tmp = str_arr[i].Split(delimiter);

                    TobiiRecord tobiiRecord = new TobiiRecord();
                    tobiiRecord.time_ms  = int.Parse(tmp[0]);
                    tobiiRecord.CurFZone = int.Parse(tmp[1]);

                    tobiiRecords.Add(tobiiRecord);
                }
            }
            return(tobiiRecords);
        }
예제 #3
0
        public void TobiiCSCRead(string filename, List <TobiiRecord> tobiiList, int ZoneColCount)
        {
            char separator = '\n';
            char delimiter = '\t';

            int  N_timestampCol = 0, N_firstZoneCol = 0;
            long i = 0;

            using (StreamReader rd = new StreamReader(new FileStream(filename, FileMode.Open)))
            {
                string[] first_string_arr = { "" };
                first_string_arr = rd.ReadLine().Split(delimiter);
                N_timestampCol   = SearchColFirst(first_string_arr, "Recording timestamp");
                N_firstZoneCol   = SearchColFirst(first_string_arr, "AOI hit [");

                bool EndOfFile = false;
                while (!EndOfFile)
                {
                    string[] str_arr = { "" };
                    string   big_str = "";
                    EndOfFile = ReadPartOfFile(rd, out big_str);

                    str_arr = big_str.Split(separator);
                    foreach (string s in str_arr)
                    {
                        string[] tmp = { "" };
                        i++;
                        tmp = s.Split(delimiter);
                        if (tmp.Count() < 3)
                        {
                            continue;
                        }
                        TobiiRecord TR = new TobiiRecord();
                        if (!long.TryParse(tmp[N_timestampCol], out TR.time_ms))
                        {
                            throw new Exception("Не могу преобразовать в timestamp строку  " + tmp[N_timestampCol]);
                        }

                        string[] Hits = new string[tmp.Count()];
                        try
                        {
                            Array.Copy(tmp, N_firstZoneCol, Hits, 0, ZoneColCount);
                        }
                        catch
                        { Console.WriteLine("!!!"); }
                        TR.zones = SearchCol(Hits, "1");
                        tobiiList.Add(TR);
                    }
                }

                FiltredTobiiList = CompactTobiiRecords(tobiiList);
            }
        }
예제 #4
0
        public void ConvertTo5Hz(string dir)
        {
            string[] files = Directory.GetFiles(dir, "*.txt", SearchOption.TopDirectoryOnly);
            foreach (var filepath in files)
            {
                List <TobiiRecord> tobiiRecords = ReadTxtToTobiiRecordList(filepath);
                long time_beg  = tobiiRecords.First().time_ms;
                long time_end  = tobiiRecords.Last().time_ms;
                int  lastIndex = tobiiRecords.IndexOf(tobiiRecords.Last());

                time_beg = 200 * (time_beg / 200);

                List <TobiiRecord> NewTobiiRecords = new List <TobiiRecord>();

                for (long t = time_beg; t < time_end; t += 200)
                {
                    TobiiRecord NewTR = new TobiiRecord();
                    int         zone  = -1;
                    foreach (var tr in tobiiRecords)
                    {
                        int index = tobiiRecords.IndexOf(tr);
                        if (index == lastIndex)
                        {
                            break;
                        }
                        if ((tr.time_ms <= t) && (tobiiRecords[index + 1].time_ms > t))
                        {
                            NewTR.time_ms  = t;
                            NewTR.CurFZone = tr.CurFZone;
                            break;
                        }
                    }
                    NewTobiiRecords.Add(NewTR);
                }

                string Newfilepath = Path.Combine(Path.GetDirectoryName(filepath), "Zones5Hz_" + Path.GetFileName(filepath));
                using (StreamWriter writer = File.CreateText(Newfilepath))
                {
                    foreach (var tr in NewTobiiRecords)
                    {
                        string s = tr.time_ms.ToString() + "\t" + tr.CurFZone.ToString();
                        writer.WriteLine(s);
                    }
                }
            }
        }
예제 #5
0
        public void TobiiExelRead(string filename, List <TobiiRecord> tobiiList, int ZoneColCount)
        {
            //считываем данные из Excel файла в двумерный массив
            Excel.Application xlApp = new Excel.Application(); //Excel
            Excel.Workbook    xlWB;                            //рабочая книга
            Excel.Worksheet   xlSht;                           //лист Excel
            xlWB  = xlApp.Workbooks.Open(filename);            //название файла Excel
            xlSht = xlWB.Worksheets[1];                        //название листа или 1-й лист в книге xlSht = xlWB.Worksheets[1];



            int iLastRow    = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;                   //последняя заполненная строка в столбце А
            int iLastColumn = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column;           ////последний заполненный столбец в строке 1
            var arrData     = (object[, ])xlSht.Range[xlSht.Cells[1, 1], xlSht.Cells[iLastRow, iLastColumn]].Value; //берём данные с листа Excel

            //xlApp.Visible = true; //отображаем Excel
            xlWB.Close(false); //закрываем книгу, изменения не сохраняем
            xlApp.Quit();      //закрываем Excel

            char separator = '\n';
            char delimiter = '\t';

            //int N_timestampCol = 0, N_firstZoneCol = 0;
            //long i = 0;
            //using (StreamReader rd = new StreamReader(new FileStream(filename, FileMode.Open)))
            //{
            string[] first_string_arr = new string[iLastColumn];

            for (int i = 1; i <= iLastColumn; i++)
            {
                first_string_arr[i - 1] = arrData[1, i].ToString();
            }

            var N_timestampCol = TobiiCsvReader.SearchColFirst(first_string_arr, "Recording timestamp");
            var N_firstZoneCol = TobiiCsvReader.SearchColFirst(first_string_arr, "AOI hit [");

            bool EndOfFile = false;

            for (int i = 1; i < iLastRow; i++)
            {
                string[] tmp = new string[iLastColumn];
                for (int j = 0; j < iLastColumn; j++)
                {
                    tmp[j] = arrData[i + 1, j + 1].ToString();
                }
                TobiiRecord TR   = new TobiiRecord();
                var         time = arrData[i + 1, N_timestampCol + 1].ToString();
                if (!long.TryParse(time, out TR.time_ms))
                {
                    throw new Exception($"Не могу преобразовать в timestamp строку  {time}");
                }

                string[] Hits = new string[ZoneColCount];
                try
                {
                    Array.Copy(tmp, N_firstZoneCol, Hits, 0, ZoneColCount);
                }
                catch
                { Console.WriteLine("!!!"); }
                TR.zones = TobiiCsvReader.SearchCol(Hits, "1");
                tobiiList.Add(TR);
            }
            var FiltredTobiiList = new TobiiCsvReader().CompactTobiiRecords(tobiiList);
        }
예제 #6
0
        public void Separate()
        {
            List <List <TobiiRecord> > SuperList = new List <List <TobiiRecord> >();

            foreach (var TR in tobiiRecords)
            {
                foreach (var interval in intervals)
                {
                    if (TR.time_ms >= interval.Time_ms_beg && TR.time_ms <= interval.Time_ms_end)
                    {
                        if (interval.records.Count() == 0)//Ставим первую фиксацию разрезав предыдущую
                        {
                            int TRindex = tobiiRecords.IndexOf(TR);
                            if (TRindex != 0)
                            {
                                TobiiRecord TRfirst = new TobiiRecord(tobiiRecords[TRindex - 1]);
                                TRfirst.time_ms = interval.Time_ms_beg;
                                interval.records.Add(TRfirst);
                            }
                        }

                        interval.records.Add(TR); //Ставим саму фиксацию
                    }
                }
                foreach (var interval in intervals) //Если в пределах одной фиксации помещается весь интервал - надо найти эту фиксацию
                {
                    if (interval.records.Count() == 0)
                    {
                        int i = 0;
                        for (i = 1; i < tobiiRecords.Count; i++)
                        {
                            if (tobiiRecords[i].time_ms > interval.Time_ms_beg)            //ищем первую фиксацию, который началась после начала интервала
                            {
                                TobiiRecord TRPrev = new TobiiRecord(tobiiRecords[i - 1]); // и берем предыдущую
                                if (tobiiRecords[i - 1].time_ms < interval.Time_ms_beg)    // если предыдущая фиксация - до начала интервала началась
                                {
                                    TRPrev.time_ms = interval.Time_ms_beg;                 // считаем что фиксация все таки началась с началом интервала
                                }
                                interval.records.Add(TRPrev);
                                break;                                                     // одну добавили - и хватить
                            }
                        }
                    }
                }
            }

            foreach (var interval in intervals) // Всем раздаем по заглушке в конце интервала - по пустой фиксации.
            {
                TobiiRecord TR = new TobiiRecord();
                TR.time_ms = interval.Time_ms_end + 10;
                interval.records.Add(TR);
            }

            DirectoryInfo di = new DirectoryInfo(DirectoryForFiles);

            if (!di.Exists)
            {
                di.Create();
            }

            foreach (var interval in intervals)
            {
                //Сначала запишем файл в ту же папку
                int    number   = intervals.IndexOf(interval);
                string filename = DirectoryForFiles + prefixfilename + " №" + number.ToString("D2") + "_" + interval.Name.Replace(" ", "_") + ".txt";
                WriteResult(filename, interval.records);

                ////А теперь в свою собственную   - А вот не надо в собственную
                //string Dir_innerName = DirectoryForFiles + @"\" + prefixfilename + "_№" + number.ToString() + " " + interval.Name + @"\";
                //string filename2 = Dir_innerName + "Inner " + prefixfilename + "_№" + number.ToString() + " " + interval.Name + ".txt";
                //DirectoryInfo di_inner = new DirectoryInfo(Dir_innerName);
                //if (!di_inner.Exists) di_inner.Create();
                //WriteResult(filename2, interval.records);
            }
        }