public TobiiRecord(TobiiRecord TR) { time_ms = TR.time_ms; zones = TR.zones; fzones = TR.fzones; CurFZone = TR.CurFZone; }
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); }
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); } }
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); } } } }
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); }
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); } }