public void TestMyExtractor() { IUpdatableRow output = RowGenerator().AsUpdatable(); var testDataPath = "\"" + Directory.GetCurrentDirectory() + @"\test.txt" + "\""; using (FileStream stream = new FileStream(@"test.txt", FileMode.Open)) { //Read input file USqlStreamReader reader = new USqlStreamReader(stream); //Run the UDO EventExtractor extractor = new EventExtractor(); List <IRow> result = extractor.Extract(reader, output).ToList(); //Verify the schema //Assert.IsTrue(result[0].Schema.Count == 2); //Verify the result //Console.WriteLine("Result: "+result[0].Get<string>("contexts")); //Assert.IsTrue(result[0].Get<string>("contexts") == "yolo"); //Assert.IsTrue(result[0].Get<string>("platform") == "web"); //var contexts = result[0].Get<string>("contexts"); //var schema = JsonFunctions.JsonTuple(contexts, "data[*]"); //schema.Values.ToList().ForEach(item => { // var innerData = JsonFunctions.JsonTuple(item, "data"); //Console.WriteLine("innerdata length: "+ innerData.Count()); //innerData.Values.ToList().ForEach(innerItem => { // var genre = JsonFunctions.JsonTuple(innerItem, "navigationStart"); // genre.Values.ToList().ForEach( g => Console.WriteLine(g)); //} // ); //}); var sqlMap = result[0].Get <SqlMap <string, string> >("contexts.data.author"); var keys = sqlMap.Keys; keys.ToList().ForEach(key => Console.WriteLine($"{key}: {sqlMap[key]}")); //var data = schema.Values.ElementAt(0); //var innerData = JsonFunctions.JsonTuple(data, "data"); } }
public static UntisExportResult ParseFile(string path) { var result = new UntisExportResult { File = path }; var content = File.ReadAllLines(path); // Parse settings var settingsExtractor = new SettingsExtractor(); result.Settings = settingsExtractor.ParseContent(content).FirstOrDefault(); // Parse holidays var holidaysExtractor = new HolidaysExtractor(); result.Holidays.AddRange(holidaysExtractor.ParseContent(content)); // Parse periods var periodExtractor = new PeriodExtractor(); var periods = periodExtractor.ParseContent(content); for (int i = 0; i < periods.Count; i++) { periods[i].Number = i + 1; } result.Periods.AddRange(periods); // Parse subjects var subjectExtractor = new SubjectExtractor(); result.Subjects.AddRange(subjectExtractor.ParseContent(content)); // Parse rooms var roomExtractor = new PeriodAwareRoomExtractor(); result.Rooms.AddRange(roomExtractor.ParseContent(content)); // parse teachers var teacherExtractor = new PeriodAwareTeacherExtractor(); result.Teachers.AddRange(teacherExtractor.ParseContent(content)); // parse tuitions var tuitionExtractor = new PeriodAwareTuitionExtractor(); var tuitions = tuitionExtractor.ParseContent(content); result.Tuitions.AddRange(tuitions); // parse absences var absenceExtractor = new AbsenceExtractor(); result.Absences.AddRange(absenceExtractor.ParseContent(content)); // parse day texts var dayTextsExtractor = new DayInformationExtractor(); result.Days.AddRange(dayTextsExtractor.ParseContent(content)); // parse exams var examsExtractor = new ExamExtractor(); result.Exams.AddRange(examsExtractor.ParseContent(content)); // parse supervisions var supervisionsExtractor = new SupervisionExtractor(); var floors = supervisionsExtractor.ParseContent(content); result.SupervisionFloors.AddRange(floors); // parse substitutions var substitutionExtractor = new SubstitutionExtractor(tuitions, periods, floors, result.Absences, new Utilities.SubstitutionTypeResolver(floors.Select(x => x.Name), result.Absences)); result.Substitutions.AddRange(substitutionExtractor.ParseContent(content)); // parse events var eventExtractor = new EventExtractor(); result.Events.AddRange(eventExtractor.ParseContent(content)); return(result); }
public static async Task <UntisExportResult> ParseFileAsync(string path) { var result = new UntisExportResult { File = path }; var content = File.ReadAllLines(path); var tasks = new List <Task>(); tasks.Add(Task.Run(() => { // Parse settings var settingsExtractor = new SettingsExtractor(); result.Settings = settingsExtractor.ParseContent(content).FirstOrDefault(); })); tasks.Add(Task.Run(() => { // Parse holidays var holidaysExtractor = new HolidaysExtractor(); result.Holidays.AddRange(holidaysExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // Parse periods var periodExtractor = new PeriodExtractor(); var periods = periodExtractor.ParseContent(content); for (int i = 0; i < periods.Count; i++) { periods[i].Number = i + 1; } result.Periods.AddRange(periods); })); tasks.Add(Task.Run(() => { // Parse subjects var subjectExtractor = new SubjectExtractor(); result.Subjects.AddRange(subjectExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // Parse rooms var roomExtractor = new PeriodAwareRoomExtractor(); result.Rooms.AddRange(roomExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse teachers var teacherExtractor = new PeriodAwareTeacherExtractor(); result.Teachers.AddRange(teacherExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse tuitions var tuitionExtractor = new PeriodAwareTuitionExtractor(); result.Tuitions.AddRange(tuitionExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse absences var absenceExtractor = new AbsenceExtractor(); result.Absences.AddRange(absenceExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse day texts var dayTextsExtractor = new DayInformationExtractor(); result.Days.AddRange(dayTextsExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse exams var examsExtractor = new ExamExtractor(); result.Exams.AddRange(examsExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse supervisions var supervisionsExtractor = new SupervisionExtractor(); result.SupervisionFloors.AddRange(supervisionsExtractor.ParseContent(content)); })); tasks.Add(Task.Run(() => { // parse events var eventExtractor = new EventExtractor(); result.Events.AddRange(eventExtractor.ParseContent(content)); })); await Task.WhenAll(tasks).ContinueWith((task) => { // parse substitutions var substitutionExtractor = new SubstitutionExtractor(result.Tuitions, result.Periods, result.SupervisionFloors, result.Absences, new Utilities.SubstitutionTypeResolver(result.SupervisionFloors.Select(x => x.Name), result.Absences)); result.Substitutions.AddRange(substitutionExtractor.ParseContent(content)); }).ConfigureAwait(false); return(result); }