Hallo,
Ik heb een stukje C++ code geschreven waarmee ik een bytes log van Apache kan optellen.
Zo'n log is simpelweg een file met op elke regel het aantal bytes van een requests.
Voorbeeldje:
Mijn probleem is nu, als er te veel regels zijn in dat bestand wordt het totaal te groot voor mijn integer "total".
Mijn code
Ik doe al expres het volgende:
Zo wilde ik de grootte van "total" tegen gaan, maar alsnog gaat het fout.
Bij te veel rijen komt er gewoon 0 als total uit.
Nu is mijn vraag, ligt dit probleem bij het feit dat ik een té groot getal in die integer wil stoppen? Of maak ik ergens anders een fout in mijn code?
Ik heb een stukje C++ code geschreven waarmee ik een bytes log van Apache kan optellen.
Zo'n log is simpelweg een file met op elke regel het aantal bytes van een requests.
Voorbeeldje:
code:
1
2
3
4
5
6
| 343 446 782 6843 947 1463 |
Mijn probleem is nu, als er te veel regels zijn in dat bestand wordt het totaal te groot voor mijn integer "total".
Mijn code
code:
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
| #include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
/* Controleren of we wel genoeg input krijgen */
if (argc < 2) {
cout << "Usage: " << argv[0] << " FILE" << endl << "Returns a summary of a byteslog (in MegaBytes)" << endl;
return 0;
}
/* Enkele variabelen declareren */
char line[256];
int total = 0;
int bytes = 0;
/* File openen */
fstream byteslog(argv[1], ios::in);
/* Controleren of het bestand open is */
if (!byteslog.is_open()) {
cout << "Error opening file" << endl;
return 0;
}
/* Regel voor regel door bestand heenlopen en optellen bij het totaal */
while(byteslog >> line) {
/* Regel casten naar een int */
bytes = atoi(line);
/* Regel delen tot een MegaByte en toevoegen aan het totaal */
total += (bytes / 1024 / 1024);
}
/* Bestand sluiten */
byteslog.close();
/* Totaal weergeven (in MB's) */
cout << total << endl;
return 0;
} |
Ik doe al expres het volgende:
code:
1
| total += (bytes / 1024 / 1024); |
Zo wilde ik de grootte van "total" tegen gaan, maar alsnog gaat het fout.
Bij te veel rijen komt er gewoon 0 als total uit.
Nu is mijn vraag, ligt dit probleem bij het feit dat ik een té groot getal in die integer wil stoppen? Of maak ik ergens anders een fout in mijn code?