-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrwdata.h
More file actions
79 lines (67 loc) · 1.6 KB
/
rwdata.h
File metadata and controls
79 lines (67 loc) · 1.6 KB
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
int file_lines(FILE *fp){
int count=0;
char c;
for (c = getc(fp); c != EOF; c = getc(fp)){
if (c == '\n') count++;
}
fseek(fp, 0, SEEK_SET);
return count;
}
int str_len(char str[]){
int count = 0;
while (str[count] != '\0') {
count++;
}
return count;
}
typedef struct data{
matrix *atributes;
matrix *target;
}data;
float *line2array(char line[], int size, char split){
float *array = malloc(sizeof(float)*size);
char cut[40]; int cut_i = 0;
int array_i = 0, line_i = -1;
while (array_i != size) {
line_i++;
if(line[line_i] == split || line[line_i] == '\n' || line[line_i] == '\0'){
cut[cut_i] = '\0';
array[array_i++] = atof(cut);
cut_i = 0;
}else{
cut[cut_i++] = line[line_i];
}
}
return array;
}
data *readData(char name[], char split){
data *d = malloc(sizeof(data));
int size_train = 2, size_target = 1;
FILE *fp;
char buff[255];
fp = fopen(name, "r");
int file_size = file_lines(fp);
float *a;
matrix* train = matrix_create(file_size, size_train+1);
matrix* target = matrix_create(file_size, size_target);
int line_count = 0;
while (fgets(buff, 255, (FILE*)fp) != NULL){
a = line2array(buff, size_train+size_target, split);
//train
int i;
for (i = 0; i < size_train; i++) {
train->values[line_count][i] = a[i];
}
train->values[line_count][size_train] = 1.0;//bias
//target
for (i = 0; i < size_target; i++) {
target->values[line_count][i] = a[i+size_train];
}
line_count++;
free(a);
}
fclose(fp);
d->atributes = train;
d->target = target;
return d;
}