Advertisement
u53r

Caricamento dati METEO

Dec 9th, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.32 KB | None | 0 0
  1. /*
  2.   Caricamento dei dati dal file dati_Meteo_2019.txt
  3.   Caratteristiche del file:
  4.     * I dati utili sono memorizzati solo a partire dalla terza riga
  5.     * Le colonne sono separate da tabulazioni
  6.     * Eseguendo, su un sistema *nix, il comando "wc -l dati_Meteo_2019.txt" si apprende che il numero totale di righe è 7065.
  7.     Ne consegue che, se le righe utili partono dalla terza, vi sono due righe inutili. Il numero totale di righe utili è 7065-2 = 7063.
  8.     * 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
  9.     * 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
  10.     * All'interno del file si individuano tre tipi di dati fondamentali
  11.       * Numeri interi
  12.       * Numeri decimali
  13.       * Caratteri o array di caratteri (stringhe)
  14.     * Non è noto il significato dei dati contenuti nel file, ma ciò non è rilevante ai fini dell'implementazione del programma
  15. */
  16.  
  17.  
  18.  
  19. /*
  20.   MIGLIORIE APPLICATE E BUG RISOLTI (09/12/2019, 17:50):
  21.   * Aggiunto fclose() finale
  22.   * Eliminata la funzione skip_n_lines() (eliminate le prime righe del file)
  23.   * Corretti alcuni problemi circa le stringhe di formato
  24.   * Aggiunte alcune variabili "dimenticate"
  25.   * Formattazione appropriata nel printf() (float stampati con il numero di cifre decimali presenti nel file)
  26. */
  27.  
  28.  
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. struct METEO {
  32.   // ATTENZIONE: preferisco "tenermi largo" per quanto riguarda le dimensioni delle stringhe, prediligendo un sovradimensionamento ad un buffer overflow o ad una raccolta dati incompleta
  33.   char date[10];
  34.   char time[10];
  35.   float temp_out;
  36.   float hi_temp;
  37.   float low_temp;
  38.   int out_hum;
  39.   float dew_pt;
  40.   float wind_speed;
  41.   char wind_dir[10];
  42.   float wind_run;
  43.   float hi_speed;
  44.   char hi_dir[10];
  45.   float wind_chill;
  46.   float heat_index;
  47.   float thw_index;
  48.   float bar;
  49.   float rain;
  50.   float rain_rate;
  51.   float heat_dd;
  52.   float cool_dd;
  53.   float in_temp;
  54.   int in_hum;
  55.   float in_dew;
  56.   float in_heat;
  57.   float in_emc;
  58.   float in_air_density;
  59.   int wind_samp;
  60.   int wind_tx;
  61.   float iss_recept;
  62.   int arc_int;
  63. };
  64.  
  65. int main() {
  66.   FILE *meteo_file;
  67.   int i;
  68.   struct METEO meteo_data[7063]; // Creo un array di struct METEO. Ogni elemento conterrà il contenuto di una riga
  69.   if((meteo_file = fopen("dati_Meteo_2019.txt", "r")) == NULL){ // Se l'apertura del file crea problemi
  70.     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
  71.     exit(1); // Esco con un errore generico
  72.   }else{ // Se va tutto bene
  73.  
  74.     for (i = 0; i < 7063; i++) {
  75.  
  76.     fscanf(meteo_file,"%s\t" // date
  77.                       "%s\t" // time
  78.                       "%f\t" // temp_out
  79.                       "%f\t" // hi_temp
  80.                       "%f\t" // low_temp
  81.                       "%d\t" // out_hum
  82.                       "%f\t" // dew_pt
  83.                       "%f\t" // wind_speed
  84.                       "%s\t" // wind_dir
  85.                       "%f\t" // wind_run
  86.                       "%f\t" // hi_speed
  87.                       "%s\t" // hi_dir
  88.                       "%f\t" // wind_chill
  89.                       "%f\t" // heat_index
  90.                       "%f\t" // thw_index
  91.                       "%f\t" // bar
  92.                       "%f\t" // rain
  93.                       "%f\t" // rain_rate
  94.                       "%f\t" // heat_dd
  95.                       "%f\t" // cool_dd
  96.                       "%f\t" // in_temp
  97.                       "%d\t" // in_hum
  98.                       "%f\t" // in_dew
  99.                       "%f\t" // in_heat
  100.                       "%f\t" // in_emc
  101.                       "%f\t" // in_air_density
  102.                       "%d\t" // wind_samp
  103.                       "%d\t" // wind_tx
  104.                       "%f\t" // iss_recept
  105.                       "%d\n",// arc_int
  106.         meteo_data[i].date,
  107.         meteo_data[i].time,
  108.         &meteo_data[i].temp_out,
  109.         &meteo_data[i].hi_temp,
  110.         &meteo_data[i].low_temp,
  111.         &meteo_data[i].out_hum,
  112.         &meteo_data[i].dew_pt,
  113.         &meteo_data[i].wind_speed,
  114.         meteo_data[i].wind_dir,
  115.         &meteo_data[i].wind_run,
  116.         &meteo_data[i].hi_speed,
  117.         meteo_data[i].hi_dir,
  118.         &meteo_data[i].wind_chill,
  119.         &meteo_data[i].heat_index,
  120.         &meteo_data[i].thw_index,
  121.         &meteo_data[i].bar,
  122.         &meteo_data[i].rain,
  123.         &meteo_data[i].rain_rate,
  124.         &meteo_data[i].heat_dd,
  125.         &meteo_data[i].cool_dd,
  126.         &meteo_data[i].in_temp,
  127.         &meteo_data[i].in_hum,
  128.         &meteo_data[i].in_dew,
  129.         &meteo_data[i].in_heat,
  130.         &meteo_data[i].in_emc,
  131.         &meteo_data[i].in_air_density,
  132.         &meteo_data[i].wind_samp,
  133.         &meteo_data[i].wind_tx,
  134.         &meteo_data[i].iss_recept,
  135.         &meteo_data[i].arc_int
  136.   );
  137.     }
  138.  
  139.     for (i = 0; i < 7063; i++) {
  140.  
  141.     printf("%s\t" // date
  142.                       "%s\t" // time
  143.                       "%.1f\t" // temp_out
  144.                       "%.1f\t" // hi_temp
  145.                       "%.1f\t" // low_temp
  146.                       "%d\t" // out_hum
  147.                       "%.1f\t" // dew_pt
  148.                       "%.1f\t" // wind_speed
  149.                       "%s\t" // wind_dir
  150.                       "%.2f\t" // wind_run
  151.                       "%.1f\t" // hi_speed
  152.                       "%s\t" // hi_dir
  153.                       "%.1f\t" // wind_chill
  154.                       "%.1f\t" // heat_index
  155.                       "%.1f\t" // thw_index
  156.                       "%.1f\t" // bar
  157.                       "%.2f\t" // rain
  158.                       "%.1f\t" // rain_rate
  159.                       "%.3f\t" // heat_dd
  160.                       "%.3f\t" // cool_dd
  161.                       "%.1f\t" // in_temp
  162.                       "%d\t" // in_hum
  163.                       "%.1f\t" // in_dew
  164.                       "%.1f\t" // in_heat
  165.                       "%.2f\t" // in_emc
  166.                       "%.4f\t" // in_air_density
  167.                       "%d\t" // wind_samp
  168.                       "%d\t" // wind_tx
  169.                       "%.1f\t" // iss_recept
  170.                       "%d\n",// arc_int
  171.         meteo_data[i].date,
  172.         meteo_data[i].time,
  173.         meteo_data[i].temp_out,
  174.         meteo_data[i].hi_temp,
  175.         meteo_data[i].low_temp,
  176.         meteo_data[i].out_hum,
  177.         meteo_data[i].dew_pt,
  178.         meteo_data[i].wind_speed,
  179.         meteo_data[i].wind_dir,
  180.         meteo_data[i].wind_run,
  181.         meteo_data[i].hi_speed,
  182.         meteo_data[i].hi_dir,
  183.         meteo_data[i].wind_chill,
  184.         meteo_data[i].heat_index,
  185.         meteo_data[i].thw_index,
  186.         meteo_data[i].bar,
  187.         meteo_data[i].rain,
  188.         meteo_data[i].rain_rate,
  189.         meteo_data[i].heat_dd,
  190.         meteo_data[i].cool_dd,
  191.         meteo_data[i].in_temp,
  192.         meteo_data[i].in_hum,
  193.         meteo_data[i].in_dew,
  194.         meteo_data[i].in_heat,
  195.         meteo_data[i].in_emc,
  196.         meteo_data[i].in_air_density,
  197.         meteo_data[i].wind_samp,
  198.         meteo_data[i].wind_tx,
  199.         meteo_data[i].iss_recept,
  200.         meteo_data[i].arc_int
  201.   );
  202.     }
  203.     fclose(meteo_file);
  204.   }
  205.   return 0;
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement