Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 3811845f

Přidáno uživatelem Alex Konig před více než 3 roky(ů)

Simple parser - agregates data on "day" granuality

Zobrazit rozdíly:

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
... Rozdílový soubor je zkrácen, protože jeho délka přesahuje max. limit.

Také k dispozici: Unified diff