-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmergeDataSets.cpp
65 lines (56 loc) · 1.64 KB
/
mergeDataSets.cpp
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
/*
Run: ./<executavel> <arquivo_saida> <numero_datasets> <dataset_1> ... <dataset_N>
*/
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
void error(){
printf("Entrada incorreta!!! Use:\n");
printf("\t ./<executavel> <arquivo_saida> <numero_datasets> <dataset_1> ... <dataset_N>");
}
int main (int argc, char **argv){
int nFiles, i, j, k, *nAttrsDataSets, nInstances, nAttrs, nInstancesAux, nClassesAux, nAttrsAux, label, nInst;
double attrVal;
FILE **files, *fout;
if(argc < 5){
error();
exit(-1);
}
nFiles = atoi(argv[2]);
if(argc != nFiles + 3){
error();
exit(-1);
}
files = (FILE**)malloc(nFiles * sizeof(FILE*));
nAttrsDataSets = (int*)malloc(nFiles * sizeof(int));
nAttrs = 0;
for(i = 0; i < nFiles; ++i){
files[i] = fopen(argv[i + 3], "r");
fscanf(files[i], "%d %d %d", &nInstancesAux, &nClassesAux, &nAttrsAux);
nAttrsDataSets[i] = nAttrsAux;
nAttrs += nAttrsAux;
}
nInstances = nInstancesAux;
fout = fopen(argv[1], "w");
for(i = 0; i < nInstances; ++i){
for(j = 0; j < nFiles; ++j){
fscanf(files[j], "%d\t%d", &nInst, &label);
if(j == 0){
fprintf(fout, "%d\t%d\t", nInst, label);
}
for(k = 0; k < nAttrsDataSets[j]; ++k){
fscanf(files[j], "%lf", &attrVal);
fprintf(fout, " %lf", attrVal);
}
}
fprintf(fout, "\n");
}
fclose(fout);
for(i = 0; i < nFiles; ++i){
fclose(files[i]);
}
free(nAttrsDataSets);
free(files);
return 0;
}