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