Come leggere un file CSV in C

click fraud protection

Consultare la documentazione del programma che fornisce il file CSV. Determinare il numero di campi in ciascuna riga, nonché il formato di ciascun campo. Ad esempio, se un programma fornisce un CSV con i seguenti dati: 1, "test", 34.5 Si annotano tre campi: un intero, una stringa e un numero in virgola mobile.

Creare una struttura contenente un membro dati per ogni campo identificato nel CSV. Usando la riga di esempio fornita di 1, "test", 34.5 avresti bisogno della seguente struttura: struct data { int col1; carattere *col2; galleggiante col3; };

Crea un metodo nel tuo programma che gestirà la lettura del file CSV. Questo dovrà essere accessibile al resto del tuo programma e probabilmente dovrà lavorare su strutture di dati comuni in modo che altri metodi possano accedere ai dati che sono stati letti. Passare il parametro per riferimento per eliminare la necessità di un valore restituito. Un prototipo di funzione di esempio sarebbe: void ParseCSV( char *filename, data& input );

Creare un oggetto file, che leggerà i dati, utilizzando il seguente codice: FILE * pInput;

Crea un buffer di caratteri abbastanza grande da contenere una riga del file alla volta. A causa dei vincoli del linguaggio, il modo più semplice per farlo è dichiarare un array di caratteri di dimensioni sufficientemente grandi, come con: #define BUFFER_SIZE 1024

Apri il file con il seguente codice e assegnalo all'oggetto FILE creato in precedenza: pInput = fopen ("filename", "r")

fgets (buf, sizeof (buf), pInput)

Analizza il CSV usando la funzione "strtok". Crea una nuova stringa di caratteri per puntare ai token e inizializzala con i dati dalla riga letta sopra: char *tok = strtok (buf, ",")

Converti il ​​token ricevuto nei dati appropriati. Utilizzando la riga di esempio: 1, "test", 3.45 converte i dati contenuti in "tok" in un numero intero utilizzando il codice seguente: row.col1 = atoi (tok);

Per le letture successive dalla stessa riga, passa a "strtok" un parametro NULL invece della stringa del buffer che hai letto prima: tok = strtok (NULL, ",") Quindi, converti il ​​token nel tipo di dati appropriato. Usando la riga di esempio 1,"test",3.45 Il codice di analisi per una singola riga sarebbe: char *tok = strtok (buf, ","); riga.col1 = atoi (tok); tok = strtok (NULL, ","); riga.col2 = tok; tok = strtok (NULL, ","); riga.col3 = atof (tok);

Eseguire questa operazione per tutte le voci su ciascuna riga del CSV. La funzione "strtok" continuerà a fornire i dati tra i valori della virgola finché non esaurirà i dati nel buffer, a quel punto restituirà NULL. Questo indicherà che hai finito con la linea.

Avvertimento

La funzione "fopen" può restituire NULL se si è verificato un errore: assicurati di controllare il file prima di utilizzarlo. In alcuni casi, i token forniti potrebbero non essere del formato previsto. Assicurati di esaminare i tuoi dati prima di convertirli alla cieca controllando i valori di errore comuni (la stringa vuota, NULL, ecc.).