Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 0da0ac88

Přidáno uživatelem Alex Konig před asi 4 roky(ů)

Parse data as days - averages, sums

Zobrazit rozdíly:

Server/Parser 1.0/Parsers/LogInParser.cs
1
using System;
1
using Parser_1._0.InputData;
2
using Parser_1._0.OutputInfo;
3
using System;
2 4
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
5
using System.IO;
6 6

  
7 7
namespace Parser_1._0.Parsers
8 8
{
9 9
    class LogInParser
10 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].date.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

  
11 113
    }
12 114
}

Také k dispozici: Unified diff