/// <summary> /// Синхронизировать K-файл в соответствии с ID и таблицей синхронизации /// </summary> /// <param name="file_k">Путь к Rфайлу</param> /// <param name="SyncToIdTableFilename">Путь к таблице синхронизации по ID</param> public static void SyncronizeKFileAccordingToSyncToIdTable(string file_k, string SyncToIdTableFilename, TextBox OuterTextBox) { List <KadrIntervals> K = SpecialFor9_41_SCENARY2.DeserializeKFiles(file_k); //считываем данные из Excel файла в двумерный массив Excel.Application xlApp = new Excel.Application(); //Excel Excel.Workbook xlWB; //рабочая книга Excel.Worksheet xlSht; //лист Excel xlWB = xlApp.Workbooks.Open(SyncToIdTableFilename); //название файла Excel xlSht = xlWB.Worksheets[1]; //название листа или 1-й лист в книге xlSht = xlWB.Worksheets[1]; int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; var arrData = (object[, ])xlSht.Range["A1:B" + iLastRow].Value; //берём данные с листа Excel int i; foreach (var Intervals in K) { string curId = Intervals.Id; bool curIdFindInSyncTable = false; for (i = 1; i <= arrData.GetUpperBound(0); i++) { string idFromSyncTable = (arrData[i, 1]).ToString(); if (curId == idFromSyncTable) { long delta_t = (long)(24 * 3_600_00 * (double)arrData[i, 2]); curIdFindInSyncTable = true; foreach (var interval in Intervals.Intervals) { if (Intervals.Intervals.IndexOf(interval) != 0) { interval.Time_ms_beg += delta_t; if (interval.Time_ms_beg < 0) { interval.Time_ms_beg = 0; } } else { interval.Time_ms_beg = 0; } interval.Time_ms_end += delta_t; if (interval.Time_ms_end < 0) { interval.Time_ms_end = 0; } } break; } } if (!curIdFindInSyncTable) { OuterTextBox.Text += "Id файла: " + curId + " не найден в " + Path.GetFileName(SyncToIdTableFilename) + " \n"; } } new SpecialFor9_41_SCENARY2().SerializeKFiles(K, file_k.Replace(".xml", "_sync.xml")); }
/// <summary> /// Вывод всех ID, которые есть в К-файле /// </summary> /// <param name="file_r"></param> /// <param name="OuterTextBox"></param> public static void OutputIdFromKFile(string file_k, TextBox OuterTextBox) { List <KadrIntervals> Lst = SpecialFor9_41_SCENARY2.DeserializeKFiles(file_k); OuterTextBox.Text += "----------" + "\n" + "Перечень ID в файле " + file_k + "\n" + "-----------------------" + "\n"; foreach (var Interval in Lst) { OuterTextBox.Text += Interval.Id + "\n"; } OuterTextBox.Text += "\n" + "-----------------------"; }
private static void ParseInDirectory_OneRegFile(string dir, string file_csv, string file_k, string file_r, string tab2File, int NZones, string kadrDefault = "", string tab2FileLastColumn = "T") { TobiiCsvReader tobiiCsvReader = new TobiiCsvReader(); List <TobiiRecord> tobiiRecords = new List <TobiiRecord>(); tobiiCsvReader.TobiiCSCRead(file_csv, tobiiRecords, NZones); List <TobiiRecord> FiltredTobiiList = tobiiCsvReader.CompactTobiiRecords(tobiiRecords); TabOfKeys tabOfKeys = ExcelReader.ReadTabOfKeys(tab2File, tab2FileLastColumn); Regex regex = new Regex(@"id\d{3}"); MatchCollection matches = regex.Matches(Path.GetFileName(file_csv)); if (matches.Count > 1 || matches.Count == 0) { MessageBox.Show("В имени файла " + file_csv + " найдено неверное кол-во id (0 или более 1)"); return; } string FileId = matches[0].Value.Replace("id", ""); KadrIntervals kadrIntervals; kadrIntervals = SpecialFor9_41_SCENARY2.GetKadrIntervalsInXmlKFile(file_k, FileId); FZoneTab fZoneTab = new FZoneTab(); List <TobiiRecord> FZoneList = fZoneTab.Calculate(FiltredTobiiList, kadrIntervals, tabOfKeys); FZoneList = tobiiCsvReader.ClearFromGarbageZone(FZoneList, -1, FixationAddition); FZoneList = tobiiCsvReader.CompactTobiiRecords(FZoneList, "FZones"); fZoneTab.WriteResult(file_csv.Replace(".csv", ".txt"), FZoneList); SeparatorIntervals separatorIntervals = SpecialFor9_41_SCENARY2.GetSeparatorIntervalsInXmlKFile(file_r, FileId); ResultSeparator resultSeparator = new ResultSeparator(dir + @"\reg\", separatorIntervals.Intervals, FZoneList, Path.GetFileName(file_csv).Replace(".csv", "_")); resultSeparator.Separate(); }
private void MenuItem_Click_19(object sender, RoutedEventArgs e) { SpecialFor9_41_SCENARY2.UnionFilesOnRegims(TextBoxTarget.Text); }
/// <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); }