Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Caricamento dei dati dal file dati_Meteo_2019.txt
- Caratteristiche del file:
- * I dati utili sono memorizzati solo a partire dalla terza riga
- * Le colonne sono separate da tabulazioni
- * Eseguendo, su un sistema *nix, il comando "wc -l dati_Meteo_2019.txt" si apprende che il numero totale di righe è 7065.
- Ne consegue che, se le righe utili partono dalla terza, vi sono due righe inutili. Il numero totale di righe utili è 7065-2 = 7063.
- * Eseguendo, su un sistema *nix, il comando "tail -1 dati_Meteo_2019.txt" si apprende che l'ultima riga è una riga utile e non una new line vuota
- * Eseguendo, su un sistema *nix, il comando "tail -1 dati_Meteo_2019.txt | tr ' ' '\n' | wc -l" si apprende che il numero totale di colonne è 30
- * All'interno del file si individuano tre tipi di dati fondamentali
- * Numeri interi
- * Numeri decimali
- * Caratteri o array di caratteri (stringhe)
- * Non è noto il significato dei dati contenuti nel file, ma ciò non è rilevante ai fini dell'implementazione del programma
- */
- /*
- MIGLIORIE APPLICATE E BUG RISOLTI (09/12/2019, 17:50):
- * Aggiunto fclose() finale
- * Eliminata la funzione skip_n_lines() (eliminate le prime righe del file)
- * Corretti alcuni problemi circa le stringhe di formato
- * Aggiunte alcune variabili "dimenticate"
- * Formattazione appropriata nel printf() (float stampati con il numero di cifre decimali presenti nel file)
- */
- #include <stdio.h>
- #include <stdlib.h>
- struct METEO {
- // ATTENZIONE: preferisco "tenermi largo" per quanto riguarda le dimensioni delle stringhe, prediligendo un sovradimensionamento ad un buffer overflow o ad una raccolta dati incompleta
- char date[10];
- char time[10];
- float temp_out;
- float hi_temp;
- float low_temp;
- int out_hum;
- float dew_pt;
- float wind_speed;
- char wind_dir[10];
- float wind_run;
- float hi_speed;
- char hi_dir[10];
- float wind_chill;
- float heat_index;
- float thw_index;
- float bar;
- float rain;
- float rain_rate;
- float heat_dd;
- float cool_dd;
- float in_temp;
- int in_hum;
- float in_dew;
- float in_heat;
- float in_emc;
- float in_air_density;
- int wind_samp;
- int wind_tx;
- float iss_recept;
- int arc_int;
- };
- int main() {
- FILE *meteo_file;
- int i;
- struct METEO meteo_data[7063]; // Creo un array di struct METEO. Ogni elemento conterrà il contenuto di una riga
- if((meteo_file = fopen("dati_Meteo_2019.txt", "r")) == NULL){ // Se l'apertura del file crea problemi
- printf("Errore durante l'apertura del file. Controllare che \n*il file esista \n*si trovi nella posizione corretta \n*sia nominato \"dati_Meteo_2019.txt\" \n* si abbiano i permessi per aprirlo\n"); // Stampo un messaggio di errore
- exit(1); // Esco con un errore generico
- }else{ // Se va tutto bene
- for (i = 0; i < 7063; i++) {
- fscanf(meteo_file,"%s\t" // date
- "%s\t" // time
- "%f\t" // temp_out
- "%f\t" // hi_temp
- "%f\t" // low_temp
- "%d\t" // out_hum
- "%f\t" // dew_pt
- "%f\t" // wind_speed
- "%s\t" // wind_dir
- "%f\t" // wind_run
- "%f\t" // hi_speed
- "%s\t" // hi_dir
- "%f\t" // wind_chill
- "%f\t" // heat_index
- "%f\t" // thw_index
- "%f\t" // bar
- "%f\t" // rain
- "%f\t" // rain_rate
- "%f\t" // heat_dd
- "%f\t" // cool_dd
- "%f\t" // in_temp
- "%d\t" // in_hum
- "%f\t" // in_dew
- "%f\t" // in_heat
- "%f\t" // in_emc
- "%f\t" // in_air_density
- "%d\t" // wind_samp
- "%d\t" // wind_tx
- "%f\t" // iss_recept
- "%d\n",// arc_int
- meteo_data[i].date,
- meteo_data[i].time,
- &meteo_data[i].temp_out,
- &meteo_data[i].hi_temp,
- &meteo_data[i].low_temp,
- &meteo_data[i].out_hum,
- &meteo_data[i].dew_pt,
- &meteo_data[i].wind_speed,
- meteo_data[i].wind_dir,
- &meteo_data[i].wind_run,
- &meteo_data[i].hi_speed,
- meteo_data[i].hi_dir,
- &meteo_data[i].wind_chill,
- &meteo_data[i].heat_index,
- &meteo_data[i].thw_index,
- &meteo_data[i].bar,
- &meteo_data[i].rain,
- &meteo_data[i].rain_rate,
- &meteo_data[i].heat_dd,
- &meteo_data[i].cool_dd,
- &meteo_data[i].in_temp,
- &meteo_data[i].in_hum,
- &meteo_data[i].in_dew,
- &meteo_data[i].in_heat,
- &meteo_data[i].in_emc,
- &meteo_data[i].in_air_density,
- &meteo_data[i].wind_samp,
- &meteo_data[i].wind_tx,
- &meteo_data[i].iss_recept,
- &meteo_data[i].arc_int
- );
- }
- for (i = 0; i < 7063; i++) {
- printf("%s\t" // date
- "%s\t" // time
- "%.1f\t" // temp_out
- "%.1f\t" // hi_temp
- "%.1f\t" // low_temp
- "%d\t" // out_hum
- "%.1f\t" // dew_pt
- "%.1f\t" // wind_speed
- "%s\t" // wind_dir
- "%.2f\t" // wind_run
- "%.1f\t" // hi_speed
- "%s\t" // hi_dir
- "%.1f\t" // wind_chill
- "%.1f\t" // heat_index
- "%.1f\t" // thw_index
- "%.1f\t" // bar
- "%.2f\t" // rain
- "%.1f\t" // rain_rate
- "%.3f\t" // heat_dd
- "%.3f\t" // cool_dd
- "%.1f\t" // in_temp
- "%d\t" // in_hum
- "%.1f\t" // in_dew
- "%.1f\t" // in_heat
- "%.2f\t" // in_emc
- "%.4f\t" // in_air_density
- "%d\t" // wind_samp
- "%d\t" // wind_tx
- "%.1f\t" // iss_recept
- "%d\n",// arc_int
- meteo_data[i].date,
- meteo_data[i].time,
- meteo_data[i].temp_out,
- meteo_data[i].hi_temp,
- meteo_data[i].low_temp,
- meteo_data[i].out_hum,
- meteo_data[i].dew_pt,
- meteo_data[i].wind_speed,
- meteo_data[i].wind_dir,
- meteo_data[i].wind_run,
- meteo_data[i].hi_speed,
- meteo_data[i].hi_dir,
- meteo_data[i].wind_chill,
- meteo_data[i].heat_index,
- meteo_data[i].thw_index,
- meteo_data[i].bar,
- meteo_data[i].rain,
- meteo_data[i].rain_rate,
- meteo_data[i].heat_dd,
- meteo_data[i].cool_dd,
- meteo_data[i].in_temp,
- meteo_data[i].in_hum,
- meteo_data[i].in_dew,
- meteo_data[i].in_heat,
- meteo_data[i].in_emc,
- meteo_data[i].in_air_density,
- meteo_data[i].wind_samp,
- meteo_data[i].wind_tx,
- meteo_data[i].iss_recept,
- meteo_data[i].arc_int
- );
- }
- fclose(meteo_file);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement