Come trattare con NaN di quando si legge in un file CSV in C ++
Domanda
che sto leggendo in un file CSV dei dati di serie temporali in un programma C ++. I miei dati contiene tuttavia alcuni Nan. Ad esempio:
1-Jul-2010, 1.0
2-Jul-2010, 2.0
3-Jul-2010, NaN
4-Jul-2010, 3.0
Per far fronte a questo ho scritto un breve script in Matlab che sostituisce tutte le Nan con 0.0 - Ho poi letto nel nuovo file senza il Nan. C'è un modo semplice o evitare questo pre-trattamento?
Grazie!
Soluzione
Come David Dato già accennato, non c'è bisogno di pre-processo il file a tutti. strtof () e strtod () sono entrambi in grado di convertire la stringa NaN alla NaN float / valore doppio.
Se si desidera sostituire i valori con 0.0 a set di dati, è possibile farlo utilizzando la funzione isNaN ().
if (isnan(val))
{
val = 0.0;
}
Altri suggerimenti
Vuoi che il risultato sia un galleggiante (o doppio) NaN -. Quindi utilizzare la funzione stdlib strtod ()
Se si vuole affrontare il problema a modo suo (impostato a 0, ecc) quindi leggere ogni riga in una stringa prima, assegno di NaN con strcmp () poi analizzare la stringa a seconda di ciò che si trova - più facile se NaN può apparire in una sola colonna.