summarylogtreecommitdiffstats
path: root/script.cpp
blob: 7631e5d78d4ca0487cbccc5d0632a0897dcbdfd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "script.h"
#include <QMessageBox>

vector<vector<string>> read_file(string filename, char delimeter){
    vector<vector<string>> data;
    if (delimeter == ',' || delimeter == ';'){
        ifstream in(filename);
        string read;
        while (getline(in, read)){
            vector<string> row;
            string elem;
            stringstream ss(read);
            while (getline(ss, elem, delimeter)){
                row.push_back(elem);
            }
            data.push_back(row);
        }
        in.close();
        return data;
    }
    else{
        QMessageBox msgbox;
        msgbox.setInformativeText("Неверный формат разделителя");
        msgbox.exec();
    }
    return data;
}

map<string, vector<string>> convert_to_map(vector<vector<string>> data_table){
    map<string, vector<string>> map_data;
    if (!data_table.empty()){
        vector<vector<string>> transvec(data_table[0].size(), vector<string>(data_table.size()));
        for (int i = 0; i < data_table.size(); i++){
            for (int j = 0; j < data_table[i].size(); j++){
                transvec[j][i] = data_table[i][j];
            }
        }
        for (int i = 0; i < transvec.size(); i++){
            vector<string> without_first_el = transvec[i];
            without_first_el.erase(without_first_el.begin());
            map_data[transvec[i][0]] = without_first_el;
        }
        return map_data;
    }
    else{
        cout << "Вектор пуст" << endl;
    }
    return map_data;
}


bool isNumber(const std::string& str) {
    std::stringstream ss(str);
    double doubleValue;
    ss >> doubleValue;
    return ss.eof() && !ss.fail();
}

map<string, string> get_values(map<string, vector<string>> data_map, string key_t){
    map<string, string> data;
    auto it = data_map.find(key_t);
    if (it != data_map.end()){
        auto min = *min_element(data_map[key_t].begin(), data_map[key_t].end());
        auto max = *max_element(data_map[key_t].begin(), data_map[key_t].end());
        long double sum = 0, mid;
        for (int i = 0; i < data_map[key_t].size(); i++){
            if (isNumber(data_map[key_t][i])){
                sum += stod(data_map[key_t][i]);
                mid = sum / data_map[key_t].size();
            }
        }
        data["Минимальный элемент"] = min;
        data["Максимальный элемент"] = max;
        data["Сумма(если число)"] = to_string(sum);
        data["Кол-во элементов"] = to_string(data_map[key_t].size());
        data["Средний элемент(если число)"] = to_string(mid);
        return data;
    }
    else{
        QMessageBox msgbox;
        msgbox.setInformativeText("Неверные данные");
        msgbox.exec();
    }
    return data;

}