Revize 3811845f
Přidáno uživatelem Alex Konig před více než 3 roky(ů)
Server/ServerApp.sln | ||
---|---|---|
1 |
|
|
2 |
Microsoft Visual Studio Solution File, Format Version 12.00 |
|
3 |
# Visual Studio Version 16 |
|
4 |
VisualStudioVersion = 16.0.31105.61 |
|
5 |
MinimumVisualStudioVersion = 10.0.40219.1 |
|
6 |
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerApp", "ServerApp\ServerApp.csproj", "{916C1E8A-0D6D-43FB-8BDE-DBEDF441842D}" |
|
7 |
EndProject |
|
8 |
Global |
|
9 |
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
|
10 |
Debug|Any CPU = Debug|Any CPU |
|
11 |
Release|Any CPU = Release|Any CPU |
|
12 |
EndGlobalSection |
|
13 |
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
|
14 |
{916C1E8A-0D6D-43FB-8BDE-DBEDF441842D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
|
15 |
{916C1E8A-0D6D-43FB-8BDE-DBEDF441842D}.Debug|Any CPU.Build.0 = Debug|Any CPU |
|
16 |
{916C1E8A-0D6D-43FB-8BDE-DBEDF441842D}.Release|Any CPU.ActiveCfg = Release|Any CPU |
|
17 |
{916C1E8A-0D6D-43FB-8BDE-DBEDF441842D}.Release|Any CPU.Build.0 = Release|Any CPU |
|
18 |
EndGlobalSection |
|
19 |
GlobalSection(SolutionProperties) = preSolution |
|
20 |
HideSolutionNode = FALSE |
|
21 |
EndGlobalSection |
|
22 |
GlobalSection(ExtensibilityGlobals) = postSolution |
|
23 |
SolutionGuid = {4E18E2F7-ED86-43DF-9B8D-47294B10BA49} |
|
24 |
EndGlobalSection |
|
25 |
EndGlobal |
Server/ServerApp/App.config | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8" ?> |
|
2 |
<configuration> |
|
3 |
<startup> |
|
4 |
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> |
|
5 |
</startup> |
|
6 |
</configuration> |
Server/ServerApp/Parser/InputData/CsvDataLoader.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Globalization; |
|
4 |
using System.IO; |
|
5 |
|
|
6 |
namespace Parser.InputData |
|
7 |
{ |
|
8 |
static class CsvDataLoader |
|
9 |
{ |
|
10 |
static CultureInfo cultureInfo = new CultureInfo("de-DE"); |
|
11 |
|
|
12 |
static string[] LoadCsv(string name) |
|
13 |
{ |
|
14 |
string[] lines = File.ReadAllLines(name); |
|
15 |
return lines; |
|
16 |
} |
|
17 |
|
|
18 |
public static List<JisInstance> LoadJisFile(string pathToFile) |
|
19 |
{ |
|
20 |
var lines = LoadCsv(pathToFile); |
|
21 |
List<JisInstance> list = new List<JisInstance>(); |
|
22 |
|
|
23 |
for (int i = 0; i < lines.Length; i++) |
|
24 |
{ |
|
25 |
var data = lines[i].Split(';'); |
|
26 |
data[0] = data[0].Substring(1, data[0].Length - 2); |
|
27 |
data[1] = data[1].Substring(1, data[1].Length - 2); |
|
28 |
|
|
29 |
var dateTime = DateTime.ParseExact(data[1], "G", cultureInfo); |
|
30 |
|
|
31 |
int amount = 0; |
|
32 |
int.TryParse(data[2], out amount); |
|
33 |
|
|
34 |
JisInstance inst = new JisInstance(data[0], dateTime, amount); |
|
35 |
list.Add(inst); |
|
36 |
} |
|
37 |
|
|
38 |
return list; |
|
39 |
} |
|
40 |
|
|
41 |
public static List<LogInInstance> LoadLoginFile(string pathToFile) |
|
42 |
{ |
|
43 |
var lines = LoadCsv(pathToFile); |
|
44 |
List<LogInInstance> list = new List<LogInInstance>(); |
|
45 |
|
|
46 |
for (int i = 0; i < lines.Length; i++) |
|
47 |
{ |
|
48 |
var data = lines[i].Split(';'); |
|
49 |
data[0] = data[0].Substring(1, data[0].Length - 2); |
|
50 |
data[3] = data[3].Substring(1, data[3].Length - 2); |
|
51 |
data[4] = data[4].Substring(1, data[4].Length - 2); |
|
52 |
data[5] = data[5].Substring(1, data[5].Length - 2); |
|
53 |
data[6] = data[6].Substring(1, data[6].Length - 2); |
|
54 |
data[7] = data[7].Substring(1, data[7].Length - 2); |
|
55 |
data[8] = data[8].Substring(1, data[8].Length - 2); |
|
56 |
|
|
57 |
var dateTime = DateTime.ParseExact(data[0], "G", cultureInfo); |
|
58 |
var startTime = DateTime.ParseExact(data[3], "t", cultureInfo); |
|
59 |
var endTime = DateTime.ParseExact(data[4], "t", cultureInfo); |
|
60 |
|
|
61 |
int count = 0; |
|
62 |
int.TryParse(data[1], out count); |
|
63 |
|
|
64 |
int lesson = 0; |
|
65 |
int.TryParse(data[2], out lesson); |
|
66 |
|
|
67 |
LogInInstance inst = new LogInInstance(dateTime, count, lesson, startTime, endTime, data[5], data[6], data[7], data[8]); |
|
68 |
list.Add(inst); |
|
69 |
} |
|
70 |
|
|
71 |
return list; |
|
72 |
} |
|
73 |
|
|
74 |
public static List<WeatherInstance> LoadWeatherFile(string pathToFile) |
|
75 |
{ |
|
76 |
var lines = LoadCsv(pathToFile); |
|
77 |
|
|
78 |
List<WeatherInstance> list = new List<WeatherInstance>(); |
|
79 |
for (int i = 0; i < lines.Length; i++) |
|
80 |
{ |
|
81 |
var data = lines[i].Split(';'); |
|
82 |
data[0] = data[0].Substring(1, data[0].Length - 2); |
|
83 |
|
|
84 |
var dateTime = DateTime.ParseExact(data[0], "G", cultureInfo); |
|
85 |
|
|
86 |
double temp = 0; |
|
87 |
double.TryParse(data[1], out temp); |
|
88 |
|
|
89 |
double wind = 0; |
|
90 |
double.TryParse(data[2], out wind); |
|
91 |
|
|
92 |
int rain = 0; |
|
93 |
int.TryParse(data[3], out rain); |
|
94 |
|
|
95 |
double lum = 0; |
|
96 |
double.TryParse(data[4], out lum); |
|
97 |
|
|
98 |
WeatherInstance inst = new WeatherInstance(dateTime, temp, wind, rain, lum); |
|
99 |
list.Add(inst); |
|
100 |
} |
|
101 |
|
|
102 |
return list; |
|
103 |
} |
|
104 |
|
|
105 |
} |
|
106 |
} |
Server/ServerApp/Parser/InputData/JisInstance.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.InputData |
|
4 |
{ |
|
5 |
/// <summary> |
|
6 |
/// |
|
7 |
/// Data contains: |
|
8 |
/// datum_a_cas - timestamp of JIS authentication(accuracy in milliseconds) |
|
9 |
/// pocet_logu - number of authentized users in given time |
|
10 |
/// popis_objektu - description of object according to standard ZČU tagging |
|
11 |
/// Csv format: |
|
12 |
/// "A1";"08.04.2018 14:23:15";1 |
|
13 |
/// [place tag];[date time];[amount] |
|
14 |
/// </summary> |
|
15 |
class JisInstance |
|
16 |
{ |
|
17 |
//0 |
|
18 |
public string placeTag; |
|
19 |
//1 |
|
20 |
public DateTime dateTime; |
|
21 |
//2 |
|
22 |
public int amount; |
|
23 |
|
|
24 |
public JisInstance(string placeTag, DateTime dateTime, int amount) |
|
25 |
{ |
|
26 |
this.placeTag = placeTag; |
|
27 |
this.dateTime = dateTime; |
|
28 |
this.amount = amount; |
|
29 |
} |
|
30 |
|
|
31 |
} |
|
32 |
} |
Server/ServerApp/Parser/InputData/LogInInstance.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.InputData |
|
4 |
{ |
|
5 |
|
|
6 |
/// <summary> |
|
7 |
/// |
|
8 |
/// |
|
9 |
/// Data contains: |
|
10 |
/// datum - date of access |
|
11 |
/// budova - building tag |
|
12 |
/// hodina_zacatek - start of lecture |
|
13 |
/// hodina_konec - end of lecture |
|
14 |
/// pocet_prihlaseni - number of successfull sign-ins to given computer in given lecture |
|
15 |
/// stroj_hostname - name of specific computer |
|
16 |
/// typ_objektu - type of object (classroom, laboratory, lecture room, other) |
|
17 |
/// ucebna_nazev - specific name of room |
|
18 |
/// vyucovaci_hodina - number of lecture(according to the timetable) |
|
19 |
/// Csv format: |
|
20 |
/// "27.10.2011 00:00:00";1;7;"13:00";"13:45";"UI";"Laboratoř";"UI-505";"ui505av07-lps" |
|
21 |
/// [datum];[amount];[lesson];[lesson start];[lesson end];[building];[room type];[room];[hostname] |
|
22 |
/// </summary> |
|
23 |
class LogInInstance |
|
24 |
{ |
|
25 |
// index 0 |
|
26 |
public DateTime date; |
|
27 |
// index 1 |
|
28 |
public int amount; |
|
29 |
// index 2 |
|
30 |
public int lesson; |
|
31 |
// index 3 |
|
32 |
public DateTime lessonStart; |
|
33 |
// index 4 |
|
34 |
public DateTime lessonEnd; |
|
35 |
// index 5 |
|
36 |
public string building; |
|
37 |
// index 6 |
|
38 |
public string roomType; |
|
39 |
// index 7 |
|
40 |
public string room; |
|
41 |
// index 8 |
|
42 |
public string hostname; |
|
43 |
|
|
44 |
|
|
45 |
public LogInInstance(DateTime date, int amount, int lesson, DateTime lessonStart, DateTime lessonEnd, string building, string roomtType, string room, string hostname) |
|
46 |
{ |
|
47 |
this.date = date; |
|
48 |
this.amount = amount; |
|
49 |
this.lesson = lesson; |
|
50 |
this.lessonStart = lessonStart; |
|
51 |
this.lessonEnd = lessonEnd; |
|
52 |
this.building = building; |
|
53 |
this.roomType = roomtType; |
|
54 |
this.room = room; |
|
55 |
this.hostname = hostname; |
|
56 |
} |
|
57 |
|
|
58 |
public override string ToString() |
|
59 |
{ |
|
60 |
return date + " " + room + " " + lessonStart + "-" + lessonEnd + " " + amount; |
|
61 |
} |
|
62 |
} |
|
63 |
} |
Server/ServerApp/Parser/InputData/WeatherInstance.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.InputData |
|
4 |
{ |
|
5 |
/// <summary> |
|
6 |
/// |
|
7 |
/// Csv format: |
|
8 |
/// "30.04.2019 16:19:01";20.3;5.3;0;19 |
|
9 |
/// [date time];[temperature];[wind];[rain];[luminance] |
|
10 |
/// </summary> |
|
11 |
class WeatherInstance |
|
12 |
{ |
|
13 |
// 0 |
|
14 |
public DateTime dateTime; |
|
15 |
// 1 |
|
16 |
public double temp; |
|
17 |
// 2 |
|
18 |
public double wind; |
|
19 |
// 3 |
|
20 |
public int rain; |
|
21 |
// 4 |
|
22 |
public double lum; |
|
23 |
|
|
24 |
public WeatherInstance(DateTime date, double temp, double wind, int rain, double lum) |
|
25 |
{ |
|
26 |
this.dateTime = date; |
|
27 |
this.temp = temp; |
|
28 |
this.wind = wind; |
|
29 |
this.rain = rain; |
|
30 |
this.lum = lum; |
|
31 |
} |
|
32 |
} |
|
33 |
} |
Server/ServerApp/Parser/OutputInfo/JisInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
|
|
7 |
namespace Parser.OutputInfo |
|
8 |
{ |
|
9 |
class JisInfo |
|
10 |
{ |
|
11 |
string faculty; |
|
12 |
int amount; |
|
13 |
DateTime startTime; |
|
14 |
int intervalLength; |
|
15 |
|
|
16 |
public JisInfo(string faculty, int amount, DateTime startTime, int intervalLength) |
|
17 |
{ |
|
18 |
this.faculty = faculty; |
|
19 |
this.amount = amount; |
|
20 |
this.startTime = startTime; |
|
21 |
this.intervalLength = intervalLength; |
|
22 |
} |
|
23 |
|
|
24 |
public override string ToString() |
|
25 |
{ |
|
26 |
return $"{startTime.ToString()} \t {faculty} \t {amount}"; |
|
27 |
} |
|
28 |
} |
|
29 |
} |
Server/ServerApp/Parser/OutputInfo/LogInInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
|
|
7 |
namespace Parser.OutputInfo |
|
8 |
{ |
|
9 |
class LogInInfo |
|
10 |
{ |
|
11 |
string faculty; |
|
12 |
int amount; |
|
13 |
DateTime startTime; |
|
14 |
int intervalLength; |
|
15 |
|
|
16 |
public LogInInfo(string faculty, int amount, DateTime startTime, int intervalLength) |
|
17 |
{ |
|
18 |
this.faculty = faculty; |
|
19 |
this.amount = amount; |
|
20 |
this.startTime = startTime; |
|
21 |
this.intervalLength = intervalLength; |
|
22 |
} |
|
23 |
|
|
24 |
public override string ToString() |
|
25 |
{ |
|
26 |
return $"{startTime.ToString()} \t {faculty} \t {amount}"; |
|
27 |
} |
|
28 |
} |
|
29 |
} |
Server/ServerApp/Parser/OutputInfo/LumInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
using System.Collections.Generic; |
|
3 |
using System.Linq; |
|
4 |
using System.Text; |
|
5 |
using System.Threading.Tasks; |
|
6 |
|
|
7 |
namespace Parser.OutputInfo |
|
8 |
{ |
|
9 |
class LumInfo |
|
10 |
{ |
|
11 |
// in lux |
|
12 |
double value; |
|
13 |
DateTime startTime; |
|
14 |
int intervalLength; |
|
15 |
|
|
16 |
public LumInfo(double value, DateTime startTime, int intervalLength) |
|
17 |
{ |
|
18 |
this.value = value; |
|
19 |
this.startTime = startTime; |
|
20 |
this.intervalLength = intervalLength; |
|
21 |
} |
|
22 |
|
|
23 |
public override string ToString() |
|
24 |
{ |
|
25 |
return $"{startTime.ToString()} \t {value}"; |
|
26 |
} |
|
27 |
} |
|
28 |
} |
Server/ServerApp/Parser/OutputInfo/RainInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.OutputInfo |
|
4 |
{ |
|
5 |
class RainInfo |
|
6 |
{ |
|
7 |
// probability in % |
|
8 |
double value; |
|
9 |
DateTime startTime; |
|
10 |
int intervalLength; |
|
11 |
|
|
12 |
public RainInfo(double value, DateTime startTime, int intervalLength) |
|
13 |
{ |
|
14 |
this.value = value; |
|
15 |
this.startTime = startTime; |
|
16 |
this.intervalLength = intervalLength; |
|
17 |
} |
|
18 |
|
|
19 |
public override string ToString() |
|
20 |
{ |
|
21 |
return $"{startTime.ToString()} \t {value}"; |
|
22 |
} |
|
23 |
} |
|
24 |
} |
Server/ServerApp/Parser/OutputInfo/TempInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.OutputInfo |
|
4 |
{ |
|
5 |
class TempInfo |
|
6 |
{ |
|
7 |
// in °C |
|
8 |
double value; |
|
9 |
DateTime startTime; |
|
10 |
int intervalLength; |
|
11 |
|
|
12 |
public TempInfo(double value, DateTime startTime, int intervalLength) |
|
13 |
{ |
|
14 |
this.value = value; |
|
15 |
this.startTime = startTime; |
|
16 |
this.intervalLength = intervalLength; |
|
17 |
} |
|
18 |
|
|
19 |
public override string ToString() |
|
20 |
{ |
|
21 |
return $"{startTime.ToString()} \t {value}"; |
|
22 |
} |
|
23 |
} |
|
24 |
} |
Server/ServerApp/Parser/OutputInfo/WeatherInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.OutputInfo |
|
4 |
{ |
|
5 |
class WeatherInfo |
|
6 |
{ |
|
7 |
double temp; |
|
8 |
int rain; |
|
9 |
double wind; |
|
10 |
double lum; |
|
11 |
|
|
12 |
DateTime startTime; |
|
13 |
int range; |
|
14 |
|
|
15 |
public WeatherInfo(DateTime startTime, double temp, int rain, double wind, double lum, int range) |
|
16 |
{ |
|
17 |
this.startTime = startTime; |
|
18 |
this.temp = temp; |
|
19 |
this.rain = rain; |
|
20 |
this.wind = wind; |
|
21 |
this.lum = lum; |
|
22 |
this.range = range; |
|
23 |
} |
|
24 |
|
|
25 |
public override string ToString() |
|
26 |
{ |
|
27 |
return $"{startTime.ToString()} \t {temp}°C \t {rain}% \t {wind}m/s \t {lum}lux"; |
|
28 |
} |
|
29 |
|
|
30 |
} |
|
31 |
} |
Server/ServerApp/Parser/OutputInfo/WindInfo.cs | ||
---|---|---|
1 |
using System; |
|
2 |
|
|
3 |
namespace Parser.OutputInfo |
|
4 |
{ |
|
5 |
class WindInfo |
|
6 |
{ |
|
7 |
// in m/s |
|
8 |
double value; |
|
9 |
DateTime startTime; |
|
10 |
int intervalLength; |
|
11 |
|
|
12 |
public WindInfo(double value, DateTime startTime, int intervalLength) |
|
13 |
{ |
|
14 |
this.value = value; |
|
15 |
this.startTime = startTime; |
|
16 |
this.intervalLength = intervalLength; |
|
17 |
} |
|
18 |
|
|
19 |
public override string ToString() |
|
20 |
{ |
|
21 |
return $"{startTime.ToString()} \t {value}"; |
|
22 |
} |
|
23 |
} |
|
24 |
} |
Server/ServerApp/Parser/Parsers/CsvParser.cs | ||
---|---|---|
1 |
using Parser.OutputInfo; |
|
2 |
using System; |
|
3 |
using System.Collections.Generic; |
|
4 |
using System.Globalization; |
|
5 |
using System.Threading; |
|
6 |
|
|
7 |
namespace Parser.Parsers |
|
8 |
{ |
|
9 |
class CsvParser |
|
10 |
{ |
|
11 |
|
|
12 |
string path; |
|
13 |
WeatherParser weatherParser; |
|
14 |
JisParser jisParser; |
|
15 |
LogInParser loginParser; |
|
16 |
|
|
17 |
public List<WeatherInfo> weatherList; |
|
18 |
public List<JisInfo> jisList; |
|
19 |
public List<LogInInfo> loginList; |
|
20 |
|
|
21 |
public CsvParser() |
|
22 |
{ |
|
23 |
TagInfo.CreateDictionaries(); |
|
24 |
path = "data/"; |
|
25 |
|
|
26 |
weatherParser = new WeatherParser(); |
|
27 |
jisParser = new JisParser(); |
|
28 |
loginParser = new LogInParser(); |
|
29 |
} |
|
30 |
|
|
31 |
public void Parse() |
|
32 |
{ |
|
33 |
var cultureInfo = CultureInfo.GetCultureInfo("en-GB"); |
|
34 |
Thread.CurrentThread.CurrentCulture = cultureInfo; |
|
35 |
Thread.CurrentThread.CurrentUICulture = cultureInfo; |
|
36 |
|
|
37 |
string pathWeather = path + "weather"; |
|
38 |
string pathJis = path + "jis"; |
|
39 |
string pathLogIn = path + "login"; |
|
40 |
|
|
41 |
weatherList = weatherParser.ParseWeatherData(pathWeather); |
|
42 |
jisList = jisParser.ParseJisData(pathJis); |
|
43 |
loginList = loginParser.ParseLogInData(pathLogIn); |
|
44 |
|
|
45 |
Console.WriteLine("WEATHER"); |
|
46 |
WriteToConsole(weatherList); |
|
47 |
Console.WriteLine("JIS"); |
|
48 |
WriteToConsole(jisList); |
|
49 |
Console.WriteLine("LOGIN"); |
|
50 |
WriteToConsole(loginList); |
|
51 |
} |
|
52 |
|
|
53 |
private void WriteToConsole<T>(List<T> list) |
|
54 |
{ |
|
55 |
if (list == null) |
|
56 |
{ |
|
57 |
Console.WriteLine("Unsuccessful parsing"); |
|
58 |
return; |
|
59 |
} |
|
60 |
Console.WriteLine(list.Count); |
|
61 |
|
|
62 |
for (int i = 0; i < list.Count; i++) |
|
63 |
Console.WriteLine(list[i].ToString()); |
|
64 |
} |
|
65 |
|
|
66 |
} |
|
67 |
} |
Server/ServerApp/Parser/Parsers/JisParser.cs | ||
---|---|---|
1 |
using Parser.OutputInfo; |
|
2 |
using System; |
|
3 |
using System.Collections.Generic; |
|
4 |
using System.IO; |
|
5 |
using Parser.InputData; |
|
6 |
|
|
7 |
namespace Parser.Parsers |
|
8 |
{ |
|
9 |
class JisParser |
|
10 |
{ |
|
11 |
|
|
12 |
public List<JisInfo> ParseJisData(string folder, bool wholeDay = true, int interval = 1) |
|
13 |
{ |
|
14 |
List<JisInfo> list = new List<JisInfo>(); |
|
15 |
|
|
16 |
// najít složku, ve složce sou data co se budou parsovat |
|
17 |
|
|
18 |
if (!Directory.Exists(folder)) |
|
19 |
return null; |
|
20 |
|
|
21 |
// když v jednej složce budou všechny jis data co chci zpracovat |
|
22 |
// pro každej soubor budu spouštět parsování |
|
23 |
string[] fileEntries = Directory.GetFiles(folder); |
|
24 |
foreach (string fileName in fileEntries) |
|
25 |
{ |
|
26 |
List<JisInfo> loadedData = null; |
|
27 |
// pokud po jednom dni |
|
28 |
if (wholeDay) |
|
29 |
loadedData = ProcessOneJisFileAsDays(fileName); |
|
30 |
// pokud po hodinách |
|
31 |
else |
|
32 |
{ |
|
33 |
// pokud: konec dne nebo konec aktuálního intervalu -> vemu to co sem nasčítal |
|
34 |
throw new NotImplementedException(); |
|
35 |
} |
|
36 |
|
|
37 |
list.AddRange(loadedData); |
|
38 |
} |
|
39 |
|
|
40 |
return list; |
|
41 |
} |
|
42 |
|
|
43 |
private static List<JisInfo> ProcessOneJisFileAsDays(string path) |
|
44 |
{ |
|
45 |
List<JisInfo> jisInfo = new List<JisInfo>(); |
|
46 |
|
|
47 |
// načíst data ze souboru |
|
48 |
List<JisInstance> list = CsvDataLoader.LoadJisFile(path); |
|
49 |
|
|
50 |
int[] recordedAmount = new int[TagInfo.faculties.Length]; |
|
51 |
int[] minmaxHour = new int[] { 7, 18 }; |
|
52 |
int range = minmaxHour[1] - minmaxHour[0]; |
|
53 |
|
|
54 |
// procházet data ze souboru |
|
55 |
DateTime lastStartTime = new DateTime(list[0].dateTime.Year, list[0].dateTime.Month, list[0].dateTime.Day); |
|
56 |
for (int i = 0; i < list.Count; i++) |
|
57 |
{ |
|
58 |
int currHour = list[i].dateTime.Hour; |
|
59 |
if (currHour < minmaxHour[0] || currHour > minmaxHour[1]) |
|
60 |
continue; |
|
61 |
|
|
62 |
// v každym dni agreguju |
|
63 |
string place = list[i].placeTag; |
|
64 |
DateTime date = new DateTime(list[i].dateTime.Year, list[i].dateTime.Month, list[i].dateTime.Day); |
|
65 |
if (!date.Equals(lastStartTime)) |
|
66 |
{ |
|
67 |
for (int k = 0; k < TagInfo.faculties.Length; k++) |
|
68 |
{ |
|
69 |
JisInfo dayInfo = new JisInfo(TagInfo.faculties[k], recordedAmount[k], lastStartTime, range); |
|
70 |
jisInfo.Add(dayInfo); |
|
71 |
} |
|
72 |
|
|
73 |
recordedAmount = new int[TagInfo.faculties.Length]; |
|
74 |
lastStartTime = date; |
|
75 |
} |
|
76 |
|
|
77 |
// tady nasčítávát podle místa |
|
78 |
if (TagInfo.jisPlaces.ContainsKey(place)) |
|
79 |
{ |
|
80 |
int index = TagInfo.jisPlaces[place]; |
|
81 |
if (index == -1) |
|
82 |
for (int l = 0; l < TagInfo.faculties.Length; l++) |
|
83 |
recordedAmount[l] += list[i].amount; |
|
84 |
else |
|
85 |
recordedAmount[index] += list[i].amount; |
|
86 |
|
|
87 |
} |
|
88 |
else |
|
89 |
{ |
|
90 |
Console.WriteLine("Unknown code " + list[i].placeTag); |
|
91 |
} |
|
92 |
|
|
93 |
} |
|
94 |
|
|
95 |
for (int k = 0; k < TagInfo.faculties.Length; k++) |
|
96 |
{ |
|
97 |
JisInfo dayInfo = new JisInfo(TagInfo.faculties[k], recordedAmount[k], lastStartTime, range); |
|
98 |
jisInfo.Add(dayInfo); |
|
99 |
} |
|
100 |
|
|
101 |
return jisInfo; |
|
102 |
} |
|
103 |
|
|
104 |
private static List<JisInfo> ProcessOneJisFileAsIntervals(string path, int interval) |
|
105 |
{ |
|
106 |
throw new NotImplementedException(); |
|
107 |
} |
|
108 |
} |
|
109 |
} |
Server/ServerApp/Parser/Parsers/LogInParser.cs | ||
---|---|---|
1 |
using Parser.InputData; |
|
2 |
using Parser.OutputInfo; |
|
3 |
using System; |
|
4 |
using System.Collections.Generic; |
|
5 |
using System.IO; |
|
6 |
|
|
7 |
namespace Parser.Parsers |
|
8 |
{ |
|
9 |
class LogInParser |
|
10 |
{ |
|
11 |
public List<LogInInfo> ParseLogInData(string folder, bool wholeDay = true, int interval = 1) |
|
12 |
{ |
|
13 |
List<LogInInfo> list = new List<LogInInfo>(); |
|
14 |
|
|
15 |
// najít složku, ve složce sou data co se budou parsovat |
|
16 |
|
|
17 |
if (!Directory.Exists(folder)) |
|
18 |
return null; |
|
19 |
|
|
20 |
// když v jednej složce budou všechny jis data co chci zpracovat |
|
21 |
// pro každej soubor budu spouštět parsování |
|
22 |
string[] fileEntries = Directory.GetFiles(folder); |
|
23 |
foreach (string fileName in fileEntries) |
|
24 |
{ |
|
25 |
List<LogInInfo> loadedData = null; |
|
26 |
// pokud po jednom dni |
|
27 |
if (wholeDay) |
|
28 |
loadedData = ProcessOneLogInFileAsDays(fileName); |
|
29 |
// pokud po hodinách |
|
30 |
else |
|
31 |
{ |
|
32 |
// pokud: konec dne nebo konec aktuálního intervalu -> vemu to co sem nasčítal |
|
33 |
throw new NotImplementedException(); |
|
34 |
} |
|
35 |
|
|
36 |
list.AddRange(loadedData); |
|
37 |
} |
|
38 |
|
|
39 |
return list; |
|
40 |
} |
|
41 |
|
|
42 |
private static List<LogInInfo> ProcessOneLogInFileAsDays(string path) |
|
43 |
{ |
|
44 |
List<LogInInfo> loginInfo = new List<LogInInfo>(); |
|
45 |
|
|
46 |
// načíst data ze souboru |
|
47 |
List<LogInInstance> list = CsvDataLoader.LoadLoginFile(path); |
|
48 |
|
|
49 |
int[] recordedAmount = new int[TagInfo.faculties.Length]; |
|
50 |
int[] minmaxHour = new int[] { 7, 18 }; |
|
51 |
int range = minmaxHour[1] - minmaxHour[0]; |
|
52 |
|
|
53 |
// procházet data ze souboru |
|
54 |
DateTime lastStartDay = new DateTime(list[0].date.Year, list[0].date.Month, list[0].date.Day); |
|
55 |
for (int i = 0; i < list.Count; i++) |
|
56 |
{ |
|
57 |
int currHour = list[i].lessonStart.Hour; |
|
58 |
if (currHour < minmaxHour[0] || currHour > minmaxHour[1]) |
|
59 |
continue; |
|
60 |
|
|
61 |
// v každym dni agreguju |
|
62 |
string place = list[i].building; |
|
63 |
DateTime date = new DateTime(list[i].date.Year, list[i].date.Month, list[i].date.Day); |
|
64 |
if (!date.Equals(lastStartDay)) |
|
65 |
{ |
|
66 |
for (int k = 0; k < TagInfo.faculties.Length; k++) |
|
67 |
{ |
|
68 |
LogInInfo dayInfo = new LogInInfo(TagInfo.faculties[k], recordedAmount[k], lastStartDay, range); |
|
69 |
loginInfo.Add(dayInfo); |
|
70 |
} |
|
71 |
|
|
72 |
recordedAmount = new int[TagInfo.faculties.Length]; |
|
73 |
lastStartDay = date; |
|
74 |
} |
|
75 |
|
|
76 |
// tady nasčítávát podle místa |
|
77 |
if (TagInfo.buildingTags.ContainsKey(place)) |
|
78 |
{ |
|
79 |
int index = TagInfo.buildingTags[place]; |
|
80 |
if (index == -1) |
|
81 |
for (int l = 0; l < TagInfo.faculties.Length; l++) |
|
82 |
recordedAmount[l] += list[i].amount; |
|
83 |
else if (index == -2) |
|
84 |
{ |
|
85 |
recordedAmount[0] += list[i].amount; |
|
86 |
recordedAmount[1] += list[i].amount; |
|
87 |
} |
|
88 |
else |
|
89 |
recordedAmount[index] += list[i].amount; |
|
90 |
|
|
91 |
} |
|
92 |
else |
|
93 |
{ |
|
94 |
Console.WriteLine("Unknown code " + list[i].building); |
|
95 |
} |
|
96 |
|
|
97 |
} |
|
98 |
|
|
99 |
for (int k = 0; k < TagInfo.faculties.Length; k++) |
|
100 |
{ |
|
101 |
LogInInfo dayInfo = new LogInInfo(TagInfo.faculties[k], recordedAmount[k], lastStartDay, range); |
|
102 |
loginInfo.Add(dayInfo); |
|
103 |
} |
|
104 |
|
|
105 |
return loginInfo; |
|
106 |
} |
|
107 |
|
|
108 |
private static List<JisInfo> ProcessOneLoginFileAsIntervals(string path, int interval) |
|
109 |
{ |
|
110 |
throw new NotImplementedException(); |
|
111 |
} |
|
112 |
|
|
113 |
} |
|
114 |
} |
Server/ServerApp/Parser/Parsers/TagInfo.cs | ||
---|---|---|
1 |
using System.Collections.Generic; |
|
2 |
|
|
3 |
namespace Parser.Parsers |
|
4 |
{ |
|
5 |
class TagInfo |
|
6 |
{ |
|
7 |
public static string[] faculties; |
|
8 |
|
|
9 |
// -1 all |
|
10 |
public static Dictionary<string, int> jisPlaces; |
|
11 |
|
|
12 |
// -1 all -2 FST, FEK |
|
13 |
public static Dictionary<string, int> buildingTags; |
|
14 |
|
|
15 |
public static void CreateDictionaries() |
|
16 |
{ |
|
17 |
jisPlaces = new Dictionary<string, int>(); |
|
18 |
buildingTags = new Dictionary<string, int>(); |
|
19 |
|
|
20 |
// FACULTIES |
|
21 |
|
|
22 |
faculties = new string[] { "FST", "FEK", "FEL", "FDU", "FF", "FPE", "FEK-CH", "FZS", "FAV", "FPR" }; |
|
23 |
|
|
24 |
// BUILDING TAGS |
|
25 |
|
|
26 |
buildingTags.Add("UV", -2); |
|
27 |
buildingTags.Add("UU", -2); |
|
28 |
buildingTags.Add("UK", -2); |
|
29 |
buildingTags.Add("UL", -2); |
|
30 |
buildingTags.Add("UP", -2); |
|
31 |
buildingTags.Add("UF", -2); |
|
32 |
|
|
33 |
buildingTags.Add("UT", 0); |
|
34 |
|
|
35 |
buildingTags.Add("EU", 2); |
|
36 |
buildingTags.Add("EK", 2); |
|
37 |
buildingTags.Add("EL", 2); |
|
38 |
buildingTags.Add("EP", 2); |
|
39 |
buildingTags.Add("ES", 2); |
|
40 |
buildingTags.Add("ET", 2); |
|
41 |
buildingTags.Add("EH", 2); |
|
42 |
buildingTags.Add("EZ", 2); |
|
43 |
|
|
44 |
buildingTags.Add("LS", 3); |
|
45 |
|
|
46 |
buildingTags.Add("JJ", 4); |
|
47 |
buildingTags.Add("RJ", 4); |
|
48 |
buildingTags.Add("RS", 4); |
|
49 |
buildingTags.Add("SP", 4); |
|
50 |
buildingTags.Add("SD", 4); |
|
51 |
buildingTags.Add("ST", 4); |
|
52 |
buildingTags.Add("SO", 4); |
|
53 |
|
|
54 |
buildingTags.Add("CH", 5); |
|
55 |
buildingTags.Add("VC", 5); |
|
56 |
buildingTags.Add("KL", 5); |
|
57 |
|
|
58 |
buildingTags.Add("CD", 6); |
|
59 |
|
|
60 |
buildingTags.Add("HJ", 7); |
|
61 |
buildingTags.Add("DD", 7); |
|
62 |
|
|
63 |
buildingTags.Add("UN", 8); |
|
64 |
buildingTags.Add("UC", 8); |
|
65 |
buildingTags.Add("US", 8); |
|
66 |
|
|
67 |
buildingTags.Add("PC", 9); |
|
68 |
buildingTags.Add("PS", 9); |
|
69 |
|
|
70 |
buildingTags.Add("UI", -1); |
|
71 |
buildingTags.Add("UB", -1); |
|
72 |
|
|
73 |
// JIS PLACES |
|
74 |
|
|
75 |
jisPlaces.Add("A1", -1); |
|
76 |
jisPlaces.Add("A2-Hlavni vchod", -1); |
|
77 |
jisPlaces.Add("A3", -1); |
|
78 |
jisPlaces.Add("B3-LEVY", -1); |
|
79 |
jisPlaces.Add("M16", -1); |
|
80 |
jisPlaces.Add("M14", -1); |
|
81 |
jisPlaces.Add("L1", -1); |
|
82 |
jisPlaces.Add("L2", -1); |
|
83 |
jisPlaces.Add("L1L2-vchod", -1); |
|
84 |
jisPlaces.Add("Zavora-Kaplirova", -1); |
|
85 |
jisPlaces.Add("KolaBory-vnejsi", -1); |
|
86 |
jisPlaces.Add("KolaBory-vnitrni", -1); |
|
87 |
jisPlaces.Add("Parkoviste-vjezd", -1); |
|
88 |
jisPlaces.Add("Parkoviste-vyjezd", -1); |
|
89 |
jisPlaces.Add("B3-kolarna", -1); |
|
90 |
jisPlaces.Add("MenzaKL-vydej", -1); |
|
91 |
jisPlaces.Add("Menza4-kasa1", -1); |
|
92 |
jisPlaces.Add("Menza4-kasa2", -1); |
|
93 |
jisPlaces.Add("Menza4-kasa3", -1); |
|
94 |
jisPlaces.Add("Menza4-kasa4", -1); |
|
95 |
jisPlaces.Add("Menza4-kasa5", -1); |
|
96 |
jisPlaces.Add("Menza-kasa-1", -1); |
|
97 |
jisPlaces.Add("Menza-kasa-p", -1); |
|
98 |
jisPlaces.Add("Menza1-kasa-p", -1); |
|
99 |
jisPlaces.Add("Menza1-kasa-l", -1); |
|
100 |
jisPlaces.Add("STUD_UB113", -1); |
|
101 |
jisPlaces.Add("STUD_UB211", -1); |
|
102 |
|
|
103 |
jisPlaces.Add("Zavora-FEL", 2); |
|
104 |
jisPlaces.Add("US 005 - závora vjezd", 8); |
|
105 |
jisPlaces.Add("US 005 - mříž vjezd", 8); |
|
106 |
jisPlaces.Add("Zavora-NTIS-vjezd", 8); |
|
107 |
jisPlaces.Add("Zavora-NTIS-vyjezd", 8); |
|
108 |
jisPlaces.Add("EXT/kola-B", 8); |
|
109 |
jisPlaces.Add("NTIS-BUFET", 8); |
|
110 |
|
|
111 |
jisPlaces.Add("Zavora-FDU", 3); |
|
112 |
|
|
113 |
jisPlaces.Add("VC-VJEZD", 5); |
|
114 |
jisPlaces.Add("VC-VYJEZD", 5); |
|
115 |
jisPlaces.Add("STUD_VC53", 5); |
|
116 |
jisPlaces.Add("STUD_KL20", 5); |
|
117 |
jisPlaces.Add("STUD_KL87", 5); |
|
118 |
|
|
119 |
jisPlaces.Add("EXT/kola", 0); |
|
120 |
|
|
121 |
jisPlaces.Add("EP-BUFET", 2); |
|
122 |
|
|
123 |
jisPlaces.Add("UV1-Bufet", 1); |
|
124 |
|
|
125 |
jisPlaces.Add("STUD_CHEB", 6); |
|
126 |
|
|
127 |
jisPlaces.Add("STUD_PRA1", 9); |
|
128 |
|
|
129 |
jisPlaces.Add("STUD_ST407", 4); |
|
130 |
} |
|
131 |
|
|
132 |
} |
|
133 |
} |
Server/ServerApp/Parser/Parsers/WeatherParser.cs | ||
---|---|---|
1 |
using Parser.InputData; |
|
2 |
using Parser.OutputInfo; |
|
3 |
using System; |
|
4 |
using System.Collections.Generic; |
|
5 |
using System.IO; |
|
6 |
|
|
7 |
namespace Parser.Parsers |
|
8 |
{ |
|
9 |
class WeatherParser |
|
10 |
{ |
|
11 |
|
|
12 |
public List<WeatherInfo> ParseWeatherData(string folder, bool wholeDay = true, int interval = 1) |
|
13 |
{ |
|
14 |
List<WeatherInfo> list = new List<WeatherInfo>(); |
|
15 |
|
|
16 |
// najít složku, ve složce sou data co se budou parsovat |
|
17 |
|
|
18 |
if (!Directory.Exists(folder)) |
|
19 |
return null; |
|
20 |
|
|
21 |
// když v jednej složce budou všechny jis data co chci zpracovat |
|
22 |
// pro každej soubor budu spouštět parsování |
|
23 |
string[] fileEntries = Directory.GetFiles(folder); |
|
24 |
foreach (string fileName in fileEntries) |
|
25 |
{ |
|
26 |
List<WeatherInfo> loadedData = null; |
|
27 |
// pokud po jednom dni |
|
28 |
if (wholeDay) |
|
29 |
loadedData = ProcessOneWeatherFileAsDays(fileName); |
|
30 |
// pokud po hodinách |
|
31 |
else |
|
32 |
{ |
|
33 |
// pokud: konec dne nebo konec aktuálního intervalu -> vemu to co sem nasčítal |
|
34 |
throw new NotImplementedException(); |
|
35 |
} |
|
36 |
|
|
37 |
list.AddRange(loadedData); |
|
38 |
} |
|
39 |
|
|
40 |
return list; |
|
41 |
} |
|
42 |
|
|
43 |
private static List<WeatherInfo> ProcessOneWeatherFileAsDays(string path) |
|
44 |
{ |
|
45 |
List<WeatherInfo> weatherInfo = new List<WeatherInfo>(); |
|
46 |
|
|
47 |
// načíst data ze souboru |
|
48 |
List<WeatherInstance> list = CsvDataLoader.LoadWeatherFile(path); |
|
49 |
|
|
50 |
//temp, rain, wind, lum |
|
51 |
double[] recordedAmount = new double[4]; |
|
52 |
int[] minmaxHour = new int[] { 7, 18 }; |
|
53 |
int range = minmaxHour[1] - minmaxHour[0]; |
|
54 |
|
|
55 |
// procházet data ze souboru |
|
56 |
DateTime lastStartDay = new DateTime(list[0].dateTime.Year, list[0].dateTime.Month, list[0].dateTime.Day); |
|
57 |
int values = 0; |
|
58 |
for (int i = 0; i < list.Count; i++) |
|
59 |
{ |
|
60 |
int currHour = list[i].dateTime.Hour; |
|
61 |
if (currHour < minmaxHour[0] || currHour > minmaxHour[1]) |
|
62 |
continue; |
|
63 |
|
|
64 |
// v každym dni agreguju |
|
65 |
DateTime date = new DateTime(list[i].dateTime.Year, list[i].dateTime.Month, list[i].dateTime.Day); |
|
66 |
if (!date.Equals(lastStartDay)) |
|
67 |
{ |
|
68 |
WeatherInfo dayInfo = new WeatherInfo(lastStartDay, recordedAmount[0] / values, (int)(recordedAmount[1] / values * 100), recordedAmount[2] / values, recordedAmount[3] / values, range); |
|
69 |
weatherInfo.Add(dayInfo); |
|
70 |
|
|
71 |
recordedAmount = new double[4]; |
|
72 |
lastStartDay = date; |
|
73 |
values = 0; |
|
74 |
} |
|
75 |
|
|
76 |
// tady nasčítávát data |
|
77 |
recordedAmount[0] += list[i].temp; |
|
78 |
recordedAmount[1] += list[i].rain; |
|
79 |
recordedAmount[2] += list[i].wind; |
|
80 |
recordedAmount[3] += list[i].lum * 1000; |
|
81 |
values++; |
|
82 |
} |
|
83 |
|
|
84 |
WeatherInfo dayInfo2 = new WeatherInfo(lastStartDay, recordedAmount[0] / values, (int)(recordedAmount[1] / values * 100), recordedAmount[2] / values, recordedAmount[3] / values, range); |
|
85 |
weatherInfo.Add(dayInfo2); |
|
86 |
|
|
87 |
return weatherInfo; |
|
88 |
} |
|
89 |
|
|
90 |
private static List<JisInfo> ProcessOneWeatherFileAsIntervals(string path, int interval) |
|
91 |
{ |
|
92 |
throw new NotImplementedException(); |
|
93 |
} |
|
94 |
} |
|
95 |
} |
Server/ServerApp/Program.cs | ||
---|---|---|
1 |
using Parser.Parsers; |
|
2 |
using System; |
|
3 |
using System.Collections.Generic; |
|
4 |
using System.Linq; |
|
5 |
using System.Text; |
|
6 |
using System.Threading.Tasks; |
|
7 |
|
|
8 |
namespace ServerApp |
|
9 |
{ |
|
10 |
class Program |
|
11 |
{ |
|
12 |
static void Main(string[] args) |
|
13 |
{ |
|
14 |
CsvParser p = new CsvParser(); |
|
15 |
|
|
16 |
p.Parse(); |
|
17 |
|
|
18 |
Console.ReadLine(); |
|
19 |
} |
|
20 |
} |
|
21 |
} |
Server/ServerApp/Properties/AssemblyInfo.cs | ||
---|---|---|
1 |
using System.Reflection; |
|
2 |
using System.Runtime.CompilerServices; |
|
3 |
using System.Runtime.InteropServices; |
|
4 |
|
|
5 |
// General Information about an assembly is controlled through the following |
|
6 |
// set of attributes. Change these attribute values to modify the information |
|
7 |
// associated with an assembly. |
|
8 |
[assembly: AssemblyTitle("ServerApp")] |
|
9 |
[assembly: AssemblyDescription("")] |
|
10 |
[assembly: AssemblyConfiguration("")] |
|
11 |
[assembly: AssemblyCompany("")] |
|
12 |
[assembly: AssemblyProduct("ServerApp")] |
|
13 |
[assembly: AssemblyCopyright("Copyright © 2021")] |
|
14 |
[assembly: AssemblyTrademark("")] |
|
15 |
[assembly: AssemblyCulture("")] |
|
16 |
|
|
17 |
// Setting ComVisible to false makes the types in this assembly not visible |
|
18 |
// to COM components. If you need to access a type in this assembly from |
|
19 |
// COM, set the ComVisible attribute to true on that type. |
|
20 |
[assembly: ComVisible(false)] |
|
21 |
|
|
22 |
// The following GUID is for the ID of the typelib if this project is exposed to COM |
|
23 |
[assembly: Guid("b49b2821-751c-4032-8637-b4e9282dcf06")] |
|
24 |
|
|
25 |
// Version information for an assembly consists of the following four values: |
|
26 |
// |
|
27 |
// Major Version |
|
28 |
// Minor Version |
|
29 |
// Build Number |
|
30 |
// Revision |
|
31 |
// |
|
32 |
// You can specify all the values or you can default the Build and Revision Numbers |
|
33 |
// by using the '*' as shown below: |
|
34 |
// [assembly: AssemblyVersion("1.0.*")] |
|
35 |
[assembly: AssemblyVersion("1.0.0.0")] |
|
36 |
[assembly: AssemblyFileVersion("1.0.0.0")] |
Server/ServerApp/ServerApp.csproj | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> |
|
4 |
<PropertyGroup> |
|
5 |
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
|
6 |
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
|
7 |
<ProjectGuid>{B49B2821-751C-4032-8637-B4E9282DCF06}</ProjectGuid> |
|
8 |
<OutputType>Exe</OutputType> |
|
9 |
<RootNamespace>ServerApp</RootNamespace> |
|
10 |
<AssemblyName>ServerApp</AssemblyName> |
|
11 |
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> |
|
12 |
<FileAlignment>512</FileAlignment> |
|
13 |
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> |
|
14 |
<Deterministic>true</Deterministic> |
|
15 |
</PropertyGroup> |
|
16 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
|
17 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
18 |
<DebugSymbols>true</DebugSymbols> |
|
19 |
<DebugType>full</DebugType> |
|
20 |
<Optimize>false</Optimize> |
|
21 |
<OutputPath>bin\Debug\</OutputPath> |
|
22 |
<DefineConstants>DEBUG;TRACE</DefineConstants> |
|
23 |
<ErrorReport>prompt</ErrorReport> |
|
24 |
<WarningLevel>4</WarningLevel> |
|
25 |
</PropertyGroup> |
|
26 |
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
|
27 |
<PlatformTarget>AnyCPU</PlatformTarget> |
|
28 |
<DebugType>pdbonly</DebugType> |
|
29 |
<Optimize>true</Optimize> |
|
30 |
<OutputPath>bin\Release\</OutputPath> |
|
31 |
<DefineConstants>TRACE</DefineConstants> |
|
32 |
<ErrorReport>prompt</ErrorReport> |
|
33 |
<WarningLevel>4</WarningLevel> |
|
34 |
</PropertyGroup> |
|
35 |
<ItemGroup> |
|
36 |
<Reference Include="System" /> |
|
37 |
<Reference Include="System.Core" /> |
|
38 |
<Reference Include="System.Xml.Linq" /> |
|
39 |
<Reference Include="System.Data.DataSetExtensions" /> |
|
40 |
<Reference Include="Microsoft.CSharp" /> |
|
41 |
<Reference Include="System.Data" /> |
|
42 |
<Reference Include="System.Net.Http" /> |
|
43 |
<Reference Include="System.Xml" /> |
|
44 |
</ItemGroup> |
|
45 |
<ItemGroup> |
|
46 |
<Compile Include="obj\Debug\.NETFramework,Version=v4.7.2.AssemblyAttributes.cs" /> |
|
47 |
<Compile Include="Parser\InputData\CsvDataLoader.cs" /> |
|
48 |
<Compile Include="Parser\InputData\JisInstance.cs" /> |
|
49 |
<Compile Include="Parser\InputData\LogInInstance.cs" /> |
|
50 |
<Compile Include="Parser\InputData\WeatherInstance.cs" /> |
|
51 |
<Compile Include="Parser\OutputInfo\JisInfo.cs" /> |
|
52 |
<Compile Include="Parser\OutputInfo\LogInInfo.cs" /> |
|
53 |
<Compile Include="Parser\OutputInfo\LumInfo.cs" /> |
|
54 |
<Compile Include="Parser\OutputInfo\RainInfo.cs" /> |
|
55 |
<Compile Include="Parser\OutputInfo\TempInfo.cs" /> |
|
56 |
<Compile Include="Parser\OutputInfo\WeatherInfo.cs" /> |
|
57 |
<Compile Include="Parser\OutputInfo\WindInfo.cs" /> |
|
58 |
<Compile Include="Parser\Parsers\CsvParser.cs" /> |
|
59 |
<Compile Include="Parser\Parsers\JisParser.cs" /> |
|
60 |
<Compile Include="Parser\Parsers\LogInParser.cs" /> |
|
61 |
<Compile Include="Parser\Parsers\TagInfo.cs" /> |
|
62 |
<Compile Include="Parser\Parsers\WeatherParser.cs" /> |
|
63 |
<Compile Include="Program.cs" /> |
|
64 |
<Compile Include="Properties\AssemblyInfo.cs" /> |
|
65 |
</ItemGroup> |
|
66 |
<ItemGroup> |
|
67 |
<None Include="App.config" /> |
|
68 |
<None Include="data\jis\OD_ZCU_JIS_06_2019.CSV"> |
|
69 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
70 |
</None> |
|
71 |
<None Include="data\jis\OD_ZCU_JIS_09_2019.CSV"> |
|
72 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
73 |
</None> |
|
74 |
<None Include="data\jis\OD_ZCU_JIS_10_2019.CSV"> |
|
75 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
76 |
</None> |
|
77 |
<None Include="data\jis\OD_ZCU_JIS_11_2019.CSV"> |
|
78 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
79 |
</None> |
|
80 |
<None Include="data\jis\OD_ZCU_JIS_12_2019.CSV"> |
|
81 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
82 |
</None> |
|
83 |
<None Include="data\login\OD_ZCU_STROJE_06_2019.CSV"> |
|
84 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
85 |
</None> |
|
86 |
<None Include="data\login\OD_ZCU_STROJE_09_2019.CSV"> |
|
87 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
88 |
</None> |
|
89 |
<None Include="data\login\OD_ZCU_STROJE_10_2019.CSV"> |
|
90 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
91 |
</None> |
|
92 |
<None Include="data\login\OD_ZCU_STROJE_11_2019.CSV"> |
|
93 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
94 |
</None> |
|
95 |
<None Include="data\login\OD_ZCU_STROJE_12_2019.CSV"> |
|
96 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
97 |
</None> |
|
98 |
<None Include="data\weather\OD_ZCU_POCASI_06_2019.CSV"> |
|
99 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
100 |
</None> |
|
101 |
<None Include="data\weather\OD_ZCU_POCASI_09_2019.CSV"> |
|
102 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
103 |
</None> |
|
104 |
<None Include="data\weather\OD_ZCU_POCASI_10_2019.CSV"> |
|
105 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
106 |
</None> |
|
107 |
<None Include="data\weather\OD_ZCU_POCASI_11_2019.CSV"> |
|
108 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
109 |
</None> |
|
110 |
<None Include="data\weather\OD_ZCU_POCASI_12_2019.CSV"> |
|
111 |
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|
112 |
</None> |
|
113 |
<None Include="obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache" /> |
|
114 |
<None Include="obj\Debug\ServerApp.csprojAssemblyReference.cache" /> |
|
115 |
</ItemGroup> |
|
116 |
<ItemGroup> |
|
117 |
<Folder Include="bin\Debug\" /> |
|
118 |
<Folder Include="bin\Release\" /> |
|
119 |
<Folder Include="obj\Debug\TempPE\" /> |
|
120 |
</ItemGroup> |
|
121 |
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> |
|
122 |
</Project> |
Server/ServerApp/ServerApp.csproj.user | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8"?> |
|
2 |
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
|
3 |
<PropertyGroup> |
|
4 |
<ProjectView>ShowAllFiles</ProjectView> |
|
5 |
</PropertyGroup> |
|
6 |
</Project> |
Server/ServerApp/bin/Debug/ServerApp.exe.config | ||
---|---|---|
1 |
<?xml version="1.0" encoding="utf-8" ?> |
|
2 |
<configuration> |
|
3 |
<startup> |
|
4 |
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> |
|
5 |
</startup> |
|
6 |
</configuration> |
Server/ServerApp/bin/Debug/data/jis/OD_ZCU_JIS_06_2019.CSV | ||
---|---|---|
1 |
"Zavora-FEL";"01.06.2019 00:02:45";1 |
|
2 |
"L1";"01.06.2019 00:05:08";1 |
|
3 |
"A2-Hlavni vchod";"01.06.2019 00:05:53";1 |
|
4 |
"B3-LEVY";"01.06.2019 00:06:41";1 |
|
5 |
"A2-Hlavni vchod";"01.06.2019 00:15:29";1 |
|
6 |
"L2";"01.06.2019 00:16:36";1 |
|
7 |
"A1";"01.06.2019 00:23:08";1 |
|
8 |
"A1";"01.06.2019 00:23:11";1 |
|
9 |
"A1";"01.06.2019 00:26:17";1 |
|
10 |
"M14";"01.06.2019 00:28:38";1 |
|
11 |
"M14";"01.06.2019 00:32:12";1 |
|
12 |
"L2";"01.06.2019 00:34:40";1 |
|
13 |
"A1";"01.06.2019 00:35:09";1 |
|
14 |
"A2-Hlavni vchod";"01.06.2019 00:35:19";1 |
|
15 |
"A1";"01.06.2019 00:38:01";1 |
|
16 |
"A1";"01.06.2019 00:38:59";1 |
|
17 |
"L1";"01.06.2019 00:46:16";1 |
|
18 |
"L1";"01.06.2019 00:58:04";1 |
|
19 |
"L1L2-vchod";"01.06.2019 01:01:21";1 |
|
20 |
"L1";"01.06.2019 01:01:44";1 |
|
21 |
"M14";"01.06.2019 01:02:43";1 |
|
22 |
"A1";"01.06.2019 01:03:11";1 |
|
23 |
"M16";"01.06.2019 01:07:47";1 |
|
24 |
"M16";"01.06.2019 01:08:02";1 |
|
25 |
"B3-LEVY";"01.06.2019 01:12:16";1 |
|
26 |
"L2";"01.06.2019 01:22:15";1 |
|
27 |
"M14";"01.06.2019 01:34:43";1 |
|
28 |
"L1";"01.06.2019 01:40:04";1 |
|
29 |
"A2-Hlavni vchod";"01.06.2019 01:47:51";1 |
|
30 |
"A3";"01.06.2019 01:48:32";1 |
|
31 |
"B3-LEVY";"01.06.2019 01:54:05";1 |
|
32 |
"M14";"01.06.2019 02:01:08";1 |
|
33 |
"L1";"01.06.2019 02:03:39";1 |
|
34 |
"L1L2-vchod";"01.06.2019 02:10:47";1 |
|
35 |
"L1";"01.06.2019 02:11:12";1 |
|
36 |
"M14";"01.06.2019 02:25:21";1 |
|
37 |
"L1L2-vchod";"01.06.2019 02:37:43";1 |
|
38 |
"L1";"01.06.2019 02:38:03";1 |
|
39 |
"M14";"01.06.2019 02:40:46";1 |
|
40 |
"L1L2-vchod";"01.06.2019 02:53:44";1 |
|
41 |
"L1";"01.06.2019 02:54:05";1 |
|
42 |
"A2-Hlavni vchod";"01.06.2019 02:55:23";1 |
|
43 |
"L1L2-vchod";"01.06.2019 03:25:18";1 |
|
44 |
"L2";"01.06.2019 03:25:33";1 |
|
45 |
"A2-Hlavni vchod";"01.06.2019 03:35:18";1 |
|
46 |
"M16";"01.06.2019 03:43:20";1 |
|
47 |
"M16";"01.06.2019 04:36:30";1 |
|
48 |
"L2";"01.06.2019 05:36:25";1 |
|
49 |
"L2";"01.06.2019 05:38:03";1 |
|
50 |
"M14";"01.06.2019 05:53:24";1 |
|
51 |
"A1";"01.06.2019 06:06:38";1 |
|
52 |
"A1";"01.06.2019 06:09:35";1 |
|
53 |
"A1";"01.06.2019 06:18:53";1 |
|
54 |
"M14";"01.06.2019 06:19:26";1 |
|
55 |
"M14";"01.06.2019 06:23:58";1 |
|
56 |
"M16";"01.06.2019 06:29:46";1 |
|
57 |
"M14";"01.06.2019 06:44:17";1 |
|
58 |
"M16";"01.06.2019 06:54:17";1 |
|
59 |
"A1";"01.06.2019 07:09:15";1 |
|
60 |
"A2-Hlavni vchod";"01.06.2019 07:30:19";1 |
|
61 |
"A3";"01.06.2019 07:30:57";1 |
|
62 |
"A1";"01.06.2019 07:40:14";1 |
|
63 |
"A3";"01.06.2019 07:49:44";1 |
|
64 |
"B3-LEVY";"01.06.2019 07:53:03";1 |
|
65 |
"Zavora-FEL";"01.06.2019 08:00:50";1 |
|
66 |
"L2";"01.06.2019 08:07:34";1 |
|
67 |
"Zavora-FEL";"01.06.2019 08:18:49";1 |
|
68 |
"Zavora-Kaplirova";"01.06.2019 08:19:23";1 |
|
69 |
"M14";"01.06.2019 08:27:46";1 |
|
70 |
"M14";"01.06.2019 08:27:50";1 |
|
71 |
"Zavora-FEL";"01.06.2019 08:32:59";1 |
|
72 |
"Zavora-Kaplirova";"01.06.2019 08:37:56";1 |
|
73 |
"Zavora-FEL";"01.06.2019 08:40:43";1 |
|
74 |
"L1";"01.06.2019 08:46:42";1 |
|
75 |
"M14";"01.06.2019 08:50:09";1 |
|
76 |
"B3-LEVY";"01.06.2019 08:52:13";1 |
|
77 |
"Zavora-FDU";"01.06.2019 08:52:27";1 |
|
78 |
"L2";"01.06.2019 08:56:52";1 |
|
79 |
"A2-Hlavni vchod";"01.06.2019 09:03:14";1 |
|
80 |
"M14";"01.06.2019 09:08:19";1 |
|
81 |
"Parkoviste-vjezd";"01.06.2019 09:11:10";1 |
|
82 |
"L2";"01.06.2019 09:11:19";1 |
|
83 |
"Parkoviste-vyjezd";"01.06.2019 09:14:02";1 |
|
84 |
"Parkoviste-vyjezd";"01.06.2019 09:14:03";1 |
|
85 |
"Zavora-Kaplirova";"01.06.2019 09:23:03";1 |
|
86 |
"A1";"01.06.2019 09:28:20";1 |
|
87 |
"Zavora-FEL";"01.06.2019 09:31:01";1 |
|
88 |
"A1";"01.06.2019 09:35:04";1 |
|
89 |
"M14";"01.06.2019 09:44:33";1 |
|
90 |
"B3-kolarna";"01.06.2019 09:45:09";1 |
|
91 |
"L1";"01.06.2019 09:45:48";1 |
|
92 |
"M16";"01.06.2019 09:47:26";1 |
|
93 |
"M14";"01.06.2019 09:47:36";1 |
|
94 |
"A2-Hlavni vchod";"01.06.2019 09:47:37";1 |
|
95 |
"A1";"01.06.2019 09:47:42";1 |
|
96 |
"A3";"01.06.2019 09:48:19";1 |
|
97 |
"M16";"01.06.2019 09:51:07";1 |
|
98 |
"L1";"01.06.2019 09:51:19";1 |
|
99 |
"A3";"01.06.2019 09:52:42";1 |
|
100 |
"L2";"01.06.2019 10:00:05";1 |
|
101 |
"L2";"01.06.2019 10:01:45";1 |
|
102 |
"Zavora-NTIS-vjezd";"01.06.2019 10:03:02";1 |
|
103 |
"M14";"01.06.2019 10:03:22";1 |
|
104 |
"L1";"01.06.2019 10:04:02";1 |
|
105 |
"Zavora-FEL";"01.06.2019 10:04:10";1 |
|
106 |
"A1";"01.06.2019 10:04:57";1 |
|
107 |
"L2";"01.06.2019 10:06:10";1 |
|
108 |
"B3-kolarna";"01.06.2019 10:06:50";1 |
|
109 |
"L2";"01.06.2019 10:08:23";1 |
|
110 |
"M14";"01.06.2019 10:18:32";1 |
|
111 |
"A3";"01.06.2019 10:18:47";1 |
|
112 |
"M16";"01.06.2019 10:19:10";1 |
|
113 |
"M16";"01.06.2019 10:29:27";1 |
|
114 |
"L2";"01.06.2019 10:31:00";1 |
|
115 |
"M14";"01.06.2019 10:32:56";1 |
|
116 |
"B3-LEVY";"01.06.2019 10:37:26";1 |
|
117 |
"L2";"01.06.2019 10:41:17";1 |
|
118 |
"A1";"01.06.2019 10:42:38";1 |
|
119 |
"M14";"01.06.2019 10:51:44";1 |
|
120 |
"L1";"01.06.2019 10:52:18";1 |
|
121 |
"Zavora-FDU";"01.06.2019 10:52:55";1 |
|
122 |
"Zavora-FDU";"01.06.2019 10:55:59";1 |
|
123 |
"M14";"01.06.2019 10:56:24";1 |
|
124 |
"A2-Hlavni vchod";"01.06.2019 10:57:34";1 |
|
125 |
"A3";"01.06.2019 10:58:10";1 |
|
126 |
"M14";"01.06.2019 10:59:08";1 |
|
127 |
"A1";"01.06.2019 11:01:57";1 |
|
128 |
"Zavora-FEL";"01.06.2019 11:02:58";1 |
|
129 |
"A2-Hlavni vchod";"01.06.2019 11:03:24";1 |
|
130 |
"A3";"01.06.2019 11:04:25";1 |
|
131 |
"M14";"01.06.2019 11:04:41";1 |
|
132 |
"Zavora-FEL";"01.06.2019 11:05:03";1 |
|
133 |
"A1";"01.06.2019 11:05:17";1 |
|
134 |
"L1";"01.06.2019 11:05:46";1 |
|
135 |
"Zavora-FEL";"01.06.2019 11:06:19";1 |
|
136 |
"A3";"01.06.2019 11:08:39";1 |
|
137 |
"M16";"01.06.2019 11:08:40";1 |
|
138 |
"Zavora-FDU";"01.06.2019 11:08:54";1 |
|
139 |
"M14";"01.06.2019 11:12:20";1 |
|
140 |
"Zavora-NTIS-vjezd";"01.06.2019 11:13:40";1 |
|
141 |
"A1";"01.06.2019 11:13:45";1 |
|
142 |
"M14";"01.06.2019 11:18:46";1 |
|
143 |
"B3-LEVY";"01.06.2019 11:20:23";1 |
|
144 |
"A1";"01.06.2019 11:24:47";1 |
|
145 |
"Zavora-Kaplirova";"01.06.2019 11:24:53";1 |
|
146 |
"Zavora-FEL";"01.06.2019 11:27:03";1 |
|
147 |
"B3-LEVY";"01.06.2019 11:29:16";1 |
|
148 |
"M14";"01.06.2019 11:29:42";1 |
|
149 |
"M14";"01.06.2019 11:35:14";1 |
|
150 |
"L1L2-vchod";"01.06.2019 11:37:56";1 |
|
151 |
"L1";"01.06.2019 11:38:16";1 |
|
152 |
"A1";"01.06.2019 11:38:50";1 |
|
153 |
"L2";"01.06.2019 11:39:21";1 |
|
154 |
"A1";"01.06.2019 11:42:00";1 |
|
155 |
"M16";"01.06.2019 11:42:44";1 |
|
156 |
"A2-Hlavni vchod";"01.06.2019 11:42:55";1 |
|
157 |
"A2-Hlavni vchod";"01.06.2019 11:43:13";1 |
|
158 |
"A3";"01.06.2019 11:45:23";1 |
|
159 |
"B3-kolarna";"01.06.2019 11:45:48";1 |
|
160 |
"A2-Hlavni vchod";"01.06.2019 11:46:22";1 |
|
161 |
"M16";"01.06.2019 11:48:32";1 |
|
162 |
"A1";"01.06.2019 11:49:53";1 |
|
163 |
"M16";"01.06.2019 11:52:51";1 |
|
164 |
"A2-Hlavni vchod";"01.06.2019 11:57:01";1 |
|
165 |
"A3";"01.06.2019 11:57:44";1 |
|
166 |
"A1";"01.06.2019 12:10:06";1 |
|
167 |
"M14";"01.06.2019 12:12:28";1 |
|
168 |
"L1";"01.06.2019 12:13:23";1 |
Také k dispozici: Unified diff
Simple parser - agregates data on "day" granuality