Unhandled exception

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
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

struct cmt
{
	string no, hour, min, gender, age, job, subject, content;
} f[1000];

int main()
{
	size_t index{};
	ifstream in;
	in.open("E:/cmt.csv");
	string No, Time, Gender, Age, Job, Subject, Content;
	if (!in.is_open())
	{
		cout << "Error!\n";
	}
	else
	{
		getline(in, No, ',');
		getline(in, Time, ',');
		getline(in, Gender, ',');
		getline(in, Age, ',');
		getline(in, Job, ',');
		getline(in, Subject, ',');
		getline(in, Content, '\n');
		while (getline(in, f[index].no, ','))
		{
			getline(in, f[index].hour, ':');
			getline(in, f[index].min, ',');
			getline(in, f[index].gender, ',');
			getline(in, f[index].age, ',');
			getline(in, f[index].job, ',');
			getline(in, f[index].subject, ',');
			getline(in, f[index++].content, '\n');
		}
		in.close();
	}

	ofstream out;
	out.open("E:/sohoa.csv");
	if (!out)
	{
		cout << "!";
	}

	out << "No,Time,Gender,Age,Job,Subject\n";
	for (int i = 0; i < index; i++)
	{
		out << i + 1 << ",";
		// time
		if (stoi(f[i].hour) >= 9 && stoi(f[i].hour) <= 15)
		{
			out << 1 << ",";
		}
		else if (stoi(f[i].hour) > 15 && stoi(f[i].hour) <= 18)
		{
			out << 2 << ",";
		}
		else if (stoi(f[i].hour) > 18 && stoi(f[i].hour) <= 22)
		{
			out << 3 << ",";
		}
		else if (stoi(f[i].hour) > 22 && stoi(f[i].hour) < 3)
		{
			out << 4 << ",";
		}
		else if (stoi(f[i].hour) > 3 && stoi(f[i].hour) < 9)
		{
			out << 5 << ",";
		}

		// gender
		if (f[i].gender == "Nam")
		{
			out << 1 << ",";
		}
		else if (f[i].gender == "Nữ")
		{
			out << 0 << ",";
		}
		else if (f[i].gender == "NULL")
		{
			out << 2 << ",";
		}

		// age
		if (stoi(f[i].age) <= 13)
		{
			out << 0 << ",";
		}
		else if (stoi(f[i].age) > 13 && stoi(f[i].age) <= 18)
		{
			out << 1 << ",";
		}
		else if (stoi(f[i].age) > 18 && stoi(f[i].age) <= 30)
		{
			out << 2 << ",";
		}
		else if (stoi(f[i].age) > 30 && stoi(f[i].age) <= 50)
		{
			out << 3 << ",";
		}
		else if (stoi(f[i].age) > 50)
		{
			out << 4 << ",";
		}
		else if (f[i].age == "NULL")
		{
			out << 5 << ",";
		}

		//job
		if (f[i].job == "Đi làm")
		{
			out << 1 << ",";
		}
		else if (f[i].job == "Đi học")
		{
			out << 2 << ",";
		}
		else if (f[i].job == "NULL")
		{
			out << 3 << ",";
		}
		//subject
		if (f[i].subject == "Học thuật")
		{
			out << 1 << "\n";
		}
		else if (f[i].subject == "Xã hội")
		{
			out << 2 << "\n";
		}
		else if (f[i].subject == "Khoa học")
		{
			out << 3 << "\n";
		}
		else if (f[i].subject == "Giải trí")
		{
			out << 4 << "\n";
		}
		else if (f[i].subject == "Thể thao")
		{
			out << 5 << "\n";
		}
	}
	out.close();

	system("pause");
}

Above is my code to digitize the content of the .csv file and write the numbers into another .csv. For example, if the age is below 13, output 0; age is above 13 and below 18, output 1;....
Here is the .csv to read (I can't copy the whole file since there is nearly 500 lines, so just a part)
1
2
3
4
5
6
No,Time,Gender,Age,Job,Subject,Content
1, 13:45,Nam,18,Đi làm,Xã hội,"Wtf, this is beyond science"
2, 13:44,Nữ,23,Đi làm,Xã hội,Tôi nghĩ nhà nước nên khâu lol bọn anti vaccine lại để cho bọn nó đỡ đẻ . Chứ đẻ con xong mà nuôi con kiểu này thì hại con lắm 💆🏻‍♀️
3, 13:42,Nữ,23,Đi học,Xã hội,Ghê quá
4, 13:38,Nam,30,Đi làm,Xã hội,Vaccine với tự kỉ không có liên quan với nhau. Mấy mẹ bỉm sữa nghe lời tầm phào ấy.
5, 13:32,Nữ ,NULL,NULL,Xã hội,Bùi Thu Hường sau lấy chồng chắc t phải thêm điều kiện check nhà đấy có ai anti vacxin không m ạ

When I compiled, the compiler told me: at line 92: Unhandled exception at 0x74BA18A2 in Project2.exe: Microsoft C++ exception: std::invalid_argument at memory location 0x004FF634. occurred
What is this about?
stoi will throw an invalid_argument exception if the string cannot be converted to an integer.
How can the problem be fix?
Or I have to do like: f[i].age == "14" && f[i].age == "15"... and so on?
I think the problem is that some of the ages are "NULL".

5, 13:32,Nữ ,NULL,NULL,Xã hội,Bùi Thu Hường sau ...

How to fix it depends on if "NULL" is a valid value and what you want to happen when it is used.
Last edited on
I have already fix it!
There is no choice but doing like this:
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
		// time
		string hour = f[i].hour;
		if (hour == "06" || hour == "07" || hour == "08" || hour == "09")
		{
			out << 1 << ",";
		}
		else if (hour == "10" || hour == "11" || hour == " 12"  || hour == "12" || hour == " 13" || hour == "13" || hour == " 14" || hour == "14" || hour == "15")
		{
			out << 2 << ",";
		}
		else if (hour == "16" || hour == "17" || hour == "18")
		{
			out << 3 << ",";
		}
		else if (hour == "19" || hour == "20" || hour == "21")
		{
			out << 4 << ",";
		}
		else if (hour == "22" || hour == "23" || hour == "00" || hour == "01" || hour == "02" || hour == "03" || hour == "04" || hour == "05")
		{
			out << 5 << ",";
		}

		// gender
		if (f[i].gender == "Nam")
		{
			out << 1 << ",";
		}
		else if (f[i].gender == "Nữ ")
		{
			out << 0 << ",";
		}
		else if (f[i].gender == "NULL")
		{
			out << 2 << ",";
		}

		// age
		string age = f[i].age;
		if (age == "13")
		{
			out << 0 << ",";
		}
		else if (age ==  "14"|| age == "15" || age == "15"|| age == "16" || age == "17"|| age == "18")
		{
			out << 1 << ",";
		}
		else if ( age == "19"|| age == "20"  || age == "21" || age == "22" || age == "23" || age == "24" || age == "25"|| age == "26"  || age == "27"|| age == "28"  || age == "29"|| age == "30")
		{
			out << 2 << ",";
		}
		else if (age == "31"|| age == "32"  || age == "33" || age == "34" || age == "35" || age == "36" || age == "37"|| age == "38"  || age == "39"|| age == "40"  || age == "41"|| age == "42" ||  age == "43"|| age == "44"  || age == "45" || age == "46" || age == "47" || age == "48" || age == "49")
		{
			out << 3 << ",";
		}
		else if (age == "NULL")
		{
			out << 5 << ",";
		}
		else 
		{
			out << 4 << ",";
		}

		//job
		if (f[i].job == "Đi làm")
		{
			out << 1 << ",";
		}
		else if (f[i].job == "Đi học")
		{
			out << 2 << ",";
		}
		else if (f[i].job == "NULL")
		{
			out << 3 << ",";
		}
		//subject
		if (f[i].subject == "Học thuật")
		{
			out << 1;
			out << endl;
		}
		else if (f[i].subject == "Xã hội")
		{
			out << 2;
			out << endl;
		}
		else if (f[i].subject == "Khoa học")
		{
			out << 3;
			out << endl;
		}
		else if (f[i].subject == "Giải trí")
		{
			out << 4;
			out << endl;
		}
		else if (f[i].subject == "Thể thao")
		{
			out << 5;
			out << endl;
		}

Now I think the problem is the format of the .csv causing the output:
1
2
Time,Gender,Age,Job,Subject
2,1,1,2,2,2,2,2,1,2,2,5,3,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,5,2,2,2,1,2,2,2,2,2,2,1,2,2,5,3,2,2,2,.........so on

There is no endline to print out the next line.
1
2
3
61, 12:01,Nam,19,Đi làm,Xã hội,Nghĩ lại chỉ thấy tội mấy đứa nhỏ -_-
62, 14:02,Nữ ,25,Đi học,Giải trí,Huệ ChiChi Phòng khi m vẫn còn muốn hóng =))
63,16: 31,Nam,28,Đi làm,Giải trí,Xem nè

At 62, it is " 14"; but in line 63, it is "16" without a space in front of the number.
Can the format be adjust by using excel? I've not felt familiar with the .csv files
Last edited on
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
		int t = 0, g = 0, a = 0, j = 0, s = 0;
		out << "Time,Gender,Age,Job,Subject\n";
		for (int i = 0; i < index; i++)
		{
			// time
			string hour = f[i].hour;
			if (hour == "06" || hour == "07" || hour == "08" || hour == "09")
			{
				t = 0;
			}
			else if (hour == "10" || hour == "11" || hour == " 12" || hour == "12" || hour == " 13" || hour == "13" || hour == " 14" || hour == "14" || hour == "15")
			{
				t = 1;
			}
			else if (hour == "16" || hour == "17" || hour == "18")
			{
				t = 2;
			}
			else if (hour == "19" || hour == "20" || hour == "21")
			{
				t = 3;
			}
			else
			{
				t = 4;
			}
			out << t << ",";

			// gender
			string gender = f[i].gender;
			if (gender == "Nam")
			{
				g = 1;
			}
			else if (gender == "Nữ ")
			{
				g = 0;
			}
			else
			{
				g = 2;
			}
			out << g << ",";

			// age
			string age = f[i].age;
			if (age == "13")
			{
				a = 0;
			}
			else if (age == "14" || age == "15" || age == "15" || age == "16" || age == "17" || age == "18")
			{
				a = 1;
			}
			else if (age == "19" || age == "20" || age == "21" || age == "22" || age == "23" || age == "24" || age == "25" || age == "26" || age == "27" || age == "28" || age == "29" || age == "30")
			{
				a = 2;
			}
			else if (age == "31" || age == "32" || age == "33" || age == "34" || age == "35" || age == "36" || age == "37" || age == "38" || age == "39" || age == "40" || age == "41" || age == "42" || age == "43" || age == "44" || age == "45" || age == "46" || age == "47" || age == "48" || age == "49")
			{
				a = 3;
			}
			else if (age == "NULL" || age == "Null")
			{
				a = 5;
			}
			else
			{
				a = 4;
			}
			out << a << ",";

			//job
			string job = f[i].job;
			if (job == "Đi làm")
			{
				j = 0;
			}
			else if (job == "Đi học ")
			{
				j = 1;
			}
			else
			{
				j = 2;
			}
			out << j << ",";

			//subject
			string subject = f[i].subject;
			if (subject == "Học Thuật")
			{
				s = 0;
			}
			else if (subject == "Xã hội")
			{
				s = 1;
			}
			else if (subject == "Khoa học")
			{
				s = 2;
			}
			else if (subject == "Giải trí")
			{
				s = 3;
			}
			else if (subject == "Thể thao")
			{
				s = 4;
			}
			out << s << endl;
		}

Fixed again, now the lines appear but the output is not what I expected:
1
2
3
4
5
6
7
8
9
Time,Gender,Age,Job,Subject
1,1,1,2,0
1,2,2,2,0
1,2,2,2,0
1,1,2,2,0
1,2,5,2,0
1,1,2,2,0
1,1,2,2,0
1,2,2,2,0

The last 2 columns appeared the same for the following lines, only 0,2 appears.
What did I go wrong here?
Is this a homework? If so, I think you’d better translate the exercise text and post it: it’s really hard to understand what your outcome is expected to be from your code.
There's no need to read all data before writing any. Read and write one record at a time.

Read the numeric data as numbers instead of strings.

Line 68: else if (stoi(f[i].hour) > 22 && stoi(f[i].hour) < 3)
What number is greater than 22 and less than 3?

When checking which band a number is in, you don't need to check both sides of band, only one. e.g:
1
2
3
if (x < 0) cout << "band 1";
else if (x < 5) cout << "Band 2";
else if (x < 12) cout << "Band 3";


Putting it all together:
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
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

struct cmt
{
    int no, age, hour, min;
    string gender, job, subject, content;
};

int
main()
{
    cmt f;
    string tmp;
    ifstream in;
    ofstream out;

    // Open and check the input/output files
    out.open("sohoa.csv");
    if (!out) {
	cout << "!";
	return 1;
    }
    in.open("cmt.csv");
    if (!in.is_open()) {
	cout << "Error!\n";
	return 2;
    }


    // skip the header line in the input
    if (getline(in, tmp)) {
	// only write the header line to put 
	out << "No,Time,Gender,Age,Job,Subject\n";
    }

    while (in >> f.no) {
	// Read the input line
	getline(in, tmp, ',');
	in >> f.hour;
	getline(in, tmp, ':');
	in >> f.min;
	getline(in, tmp, ',');
	getline(in, f.gender, ',');
	in >> f.age;
	getline(in, tmp, ',');
	getline(in, f.job, ',');
	getline(in, f.subject, ',');
	getline(in, f.content, '\n');

	// Write the output line
	out << f.no << ',';
	// time
	if (f.hour < 3) {
	    out << 4;
	} else if (f.hour < 9) {
	    out << 5;
	} else if (f.hour < 15) {
	    out << 1;
	} else if (f.hour < 19) {
	    out << 2;
	} else if (f.hour < 23) {
	    out << 3;
	} else {
	    out << 4;
	}
	out << ',';
	
	// gender
	if (f.gender == "Nam") {
	    out << 1 << ",";
	} else if (f.gender == "Nữ") {
	    out << 0 << ",";
	} else if (f.gender == "NULL") {
	    out << 2 << ",";
	}
	// age
	if (f.age < 14) {
	    out << 0 << ",";
	} else if (f.age < 19) {
	    out << 1 << ",";
	} else if (f.age < 31) {
	    out << 2 << ",";
	} else if (f.age < 51) {
	    out << 3 << ",";
	} else {
	    out << 4 << ",";
	}
	//job
	if (f.job == "Đi làm") {
	    out << 1 << ",";
	} else if (f.job == "Đi học") {
	    out << 2 << ",";
	} else if (f.job == "NULL") {
	    out << 3 << ",";
	}
	//subject
	if (f.subject == "Học thuật") {
	    out << 1 << "\n";
	} else if (f.subject == "Xã hội") {
	    out << 2 << "\n";
	} else if (f.subject == "Khoa học") {
	    out << 3 << "\n";
	} else if (f.subject == "Giải trí") {
	    out << 4 << "\n";
	} else if (f.subject == "Thể thao") {
	    out << 5 << "\n";
	}
    }
    out.close();
}
I've tried to converted the numbers into integers, but all I get was: Unhandled exception.
The output of this is:
1
2
3
4
- If hour is from 6am to 9am, output 1; from 9am to 15pm, output 2; from 16 to 18pm, output 3; 19pm to 21pm, output 4; and the rest, output 5.
- If gender is "Nam" (male), output 1; "Nữ " (female), output 0; if it is NULL, output 2.
- If job is "Đi làm" (working), output 1; "Đi học" (studying), output 3; NULL, output 3.
- If subject is "Học thuật" (academic), output 1; "Xã hội" (social), output 2; "Khoa học" (science), output 3; "Giải trí" (entertainment), output 4; "Thể thao" (sport), output 5.

The teacher required me to digitize the content of the .csv and output the numbers into another .csv. The input .csv file is the content which is got from using a tools to filter all of the comments on many post of Facebook, they are all Vietnamese.
I did some Google searching and see wstring is told to be used with Unicode. But I can't use it, the compiler keep telling error.
The input file is 462 lines, I can't copy the whole of them on here, just some of them:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
No,Time,Gender,Age,Job,Subject,Content
1, 13:45,Nam,18,Đi làm,Xã hội,"Wtf, this is beyond science"
2, 13:44,Nữ,23,Đi làm,Xã hội,Tôi nghĩ nhà nước nên khâu lol bọn anti vaccine lại để cho bọn nó đỡ đẻ . Chứ đẻ con xong mà nuôi con kiểu này thì hại con lắm 💆🏻‍♀️
3, 13:42,Nữ,23,Đi học,Xã hội,Ghê quá
4, 13:38,Nam,30,Đi làm,Xã hội,Vaccine với tự kỉ không có liên quan với nhau. Mấy mẹ bỉm sữa nghe lời tầm phào ấy.
5, 13:32,Nữ ,NULL,NULL,Xã hội,Bùi Thu Hường sau lấy chồng chắc t phải thêm điều kiện check nhà đấy có ai anti vacxin không m ạ
6, 13:24,Nam,22,Đi làm,Xã hội,"Cần đưa ra một số luật như trẻ chưa tiêm đủ vaccine thì không được đi nhà trẻ, không được học tiểu học, không được học trung học. À mà thôi trung học ko cần luật đó cũng được, tụi chưa tiêm chết hết cmnr còn đâu.."
7, 13:14,Nam,23,Đi học,Xã hội,"có 1 câu nói dành cho người anti vaccine:"" biết tại sao những đứa trẻ không tiêm vaccine lại ít bị tự kỉ hơn không, vì chúng có còn sống đâu mà bị"""
8, 13:14,Nữ ,24,Đi học,Xã hội,"Các ông nghĩ thế nào nếu nói như thế này:""1/2 số trẻ em tự kỉ là những bé đã từng tiêm vacxin""
Edit: ban đau nhìn mỗi cái bảng nên tôi bị nhầm. Tôi phải kích vào cái bài tiếng anh đó đọc mới hiểu. Là tiêm hay ko tiêm thì tỉ lệ trẻ bị tự kỉ vẫn gần như nhau."
9, 13:09,Nam ,26,Đi làm,Xã hội,Gì chứ các mẹ ở VN thì rất tin bác sĩ google :)) . Thật bất hạnh cho những trẻ phải làm con của họ
10, 13:08,Nữ ,24,Đi học,Xã hội,Wow
11, 13:02,Nữ,28,Đi học,Xã hội,Tự kỉ có vaccine á
12, 12:57,Nữ ,25,Đi làm,Xã hội,Tư duy logic của các bậc phụ huynh :)
13, 12:54,Nam ,NULL,Đi học,Xã hội,"Khổ =(((   còn vụ diệp lục, mấy mẹ muốn tự đi học khâu vết thương để khâu cho con nếu ngã rồi đắp diệp lục cơ,  rõ chán mấy bà,  chả hiểu đang sống timeline nào nữa"
14, 12:53,Nữ ,22,Đi làm,Xã hội,Cạn lời :))) chẳng hiểu trong đầu chứa cái gì nữa
15, 12:44,Nam,23,Đi học,Xã hội,Thật đáng sợ
16, 12:39,Nam ,30,Đi làm,Xã hội,Có một thực tế nó rõ ràng: những quốc gia hiện tại đang cho phép và áp dụng việc không tiêm vaccine ở trẻ em hầu hết là những quốc gia có chất lượng nguồn nhân lực tốt????
17, 12:38,Nam ,25,Đi làm,Xã hội,Lịch sử loài người sẽ ghi nhận tội ác kinh tởm của bọn antivax.
Last edited on
Topic archived. No new replies allowed.