01: // lettura file di tipo CSV in array di struct
02: #include<stdio.h>
03: #include<stdlib.h>
04:
05: // il file contiene, riga per riga, 4 numeri: 1 intero e 3 a virgola mobile separati da ","
06: // definisco opportuna struttura
07:
08: struct dati
09: {
10: int indice;
11: float diametro, altezza, volume;
12: };
13:
14:
15: int main(int argc, char **argv){
16:
17: FILE *fp=fopen("files/trees.csv", "r");
18: if(!fp)
19: {
20: printf("Errore non riesco ad aprire il file!\n");
21: exit(1);
22: }
23:
24: // passo 1: calcolo quante righe ha il file
25: char tmp[1000]; // array sufficientemente largo per leggere tutta una riga
26: int nrighe = 0;
27: while(fscanf(fp, " %[^\n]", tmp) == 1)
28: ++nrighe;
29:
30: fseek(fp, 0, SEEK_SET);
31:
32: // passo 2: ora che so quante righe ha il file so quanti elementi deve avere il mio array per poterli memorizzare tutti
33: struct dati *ad = malloc(nrighe * sizeof(struct dati));
34:
35: // passo 3: leggo e memorizzo i dati
36: for(int i=0; i<nrighe; ++i)
37: fscanf(fp, "%d,%f,%f,%f ", &ad[i].indice, &ad[i].diametro, &ad[i].altezza, &ad[i].volume); // notare la sintassi per l'accesso ai singoli elementi dell'array e ai membri della struct
38: fclose(fp);
39:
40:
41: // passo 4: li stampo
42: for(int i=0; i<nrighe; ++i)
43: printf("#%d:\t%.2f\t%.2f\t%.2f\n", ad[i].indice, ad[i].diametro, ad[i].altezza, ad[i].volume);
44:
45:
46: return 0;
47: }
48:
49:
Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it