-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparse.h
159 lines (135 loc) · 3.95 KB
/
parse.h
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// parsing will go here
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <algorithm>
#include "movies.h"
using namespace std;
vector<Movies> parseMovies(int numLines);
// used to convert roman numeral to integer
int value(char r);
int romanToInt(char str[]);
// integer value of a roman numeral character
int value(char r) {
if (r == 'I')
return 1;
if (r == 'V')
return 5;
if (r == 'X')
return 10;
if (r == 'L')
return 50;
if (r == 'C')
return 100;
if (r == 'D')
return 500;
if (r == 'M')
return 1000;
return -1;
}
int romanToInt(string str) {
// return stoi if str is a number
if (!isalpha(str[0])) {
return stoi(str);
}
int result = 0;
// calculate running sum for values of chars in str
for (int i = 0; i < str.size(); i++) {
int s1 = value(str[i]);
if (i + 1 < str.size()) {
int s2 = value(str[i + 1]);
if (s1 >= s2) {
result = result + s1;
} else {
result = result + s2 - s1;
i++;
}
} else {
result = result + s1;
}
}
return result;
}
vector<Movies> parseMovies(int numLines) {
fstream file;
file.open("../data/movies.csv", ios::in);
vector<vector<string>> movies;
vector<Movies> movieObjects;
string temp, line;
getline(file, line);
int n = 0;
while (getline(file, line)) {
n++;
stringstream str(line);
Movies newMovie;
getline(str, temp, ',');
newMovie.setMovieID(temp);
getline(str, temp, ',');
newMovie.setMovieName(temp);
getline(str, temp, ',');
int year = 0;
if (!temp.empty())
year = romanToInt(temp);
newMovie.setYear(year);
getline(str, temp, ',');
newMovie.setCertificate(temp);
getline(str, temp, ',');
newMovie.setRuntime(temp);
getline(str, temp, ',');
// split genre strings into a vector & remove spaces
stringstream s(temp);
string genre;
while (getline(s, genre, '|')) {
genre.erase(std::remove(genre.begin(), genre.end(), ' '), genre.end());
newMovie.setGenre(genre);
}
getline(str, temp, ',');
float rating = 0.0f;
if (!temp.empty())
rating = stof(temp);
newMovie.setRating(rating);
getline(str, temp, ',');
replace(temp.begin(), temp.end(), '|', ',');
newMovie.setDescription(temp);
getline(str, temp, ',');
stringstream sss(temp);
string director;
while (getline(sss, director, '|')) {
if (director.at(0) == ' ') {
// removing space before director name
director = director.substr(1, 100);
}
newMovie.setDirector(director);
}
getline(str, temp, ',');
newMovie.setDirectorID(temp);
getline(str, temp, ',');
stringstream ss(temp);
string star;
while (getline(ss, star, '|')) {
if (star.at(0) == ' ') {
// removing space before actor name
star = star.substr(1, 100);
}
newMovie.setStar(star);
}
getline(str, temp, ',');
newMovie.setStarID(temp);
getline(str, temp, ',');
int votes = 0;
if (!temp.empty())
votes = stoi(temp);
newMovie.setVotes(votes);
getline(str, temp, ',');
int gross = 0;
if (!temp.empty())
gross = stoi(temp);
newMovie.setGross(gross);
movieObjects.push_back(newMovie);
if (n == numLines) {
break;
}
}
return movieObjects;
}