Come leggere un file CSV in C

December 17

Come leggere un file CSV in C


Molti prodotti software che si occupano di numeri e calcoli hanno la capacità di dati di output in un file di valore separati da virgola (CSV). Questo formato può essere un modo efficace di trasportare dati tra programmi diversi, come è leggibile e abbastanza facile da manipolare. Molti programmi C che trattano dati saranno probabilmente di leggere da un file CSV ad un certo punto.

istruzione

1 Consultare la documentazione del programma che fornisce il file CSV. Determinare il numero di campi in ciascuna riga, nonché il formato di ogni campo. Ad esempio, se un programma fornisce un CSV con i seguenti dati:

1, "test", 34,5

Si potrebbe segnare tre campi: un intero, una stringa e un numero in virgola mobile.

2 Creare una struttura che contiene un membro di dati per ogni campo identificato nel CSV. Utilizzando la riga di esempio disponibile di 1, "test", 34,5 si avrebbe bisogno la seguente struttura:

dati struct

{

int col1;

char * col2;

float Col3;

};

3 Creare un metodo nel vostro programma che consente di gestire la lettura del file CSV. Questo dovrà essere accessibile al resto del programma, e sarà probabilmente bisogno di lavorare su strutture di dati comuni in modo che altri metodi possono accedere ai dati che è stato letto in. Passare il parametro di riferimento per eliminare la necessità di un valore di ritorno . Un prototipo di esempio, la funzione potrebbe essere:

annullare ParseCSV (char * filename, dati e di input);

4 Includere l'intestazione standard IO utilizzando il seguente codice:

includere <stdio.h>

Aggiungere questo codice alla parte superiore del file di origine che verrà leggendo il CSV.

5 Includere la libreria di stringa per consentire la manipolazione dei dati CSV utilizzando il seguente codice:

includere <string.h>

Aggiungere questo codice alla parte superiore del file di origine che verrà leggendo il CSV.

6 Creare un oggetto file, che leggerà i dati, utilizzando il seguente codice:

FILE * pInput;

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

definire BUFFER_SIZE 1024

char buf [BUFFER_SIZE];

8 Aprire il file con il seguente codice, e assegnarlo al vostro oggetto file creato in precedenza:

pInput = fopen ( "nome file", "r")

9 Leggere in una riga del file utilizzando il seguente codice:

fgets (buf, sizeof (BUF), pInput)

10 Analizzare il CSV utilizzando la funzione "strtok". Creare una nuova stringa di caratteri per indicare i gettoni, e inizializzare con i dati dalla linea di leggere in precedenza:

char * tok = strtok (buf, ",")

11 Convertire il token ricevuto nei dati appropriati. Utilizzando la riga di esempio:

1, "test", 3,45

convertire i dati contenuti nel "tok" per un intero utilizzando il seguente codice:

row.col1 = atoi (tok);

12 Per la successiva legge dalla stessa linea, passare "strtok" un parametro NULL al posto della stringa di buffer si legge in prima di:

tok = strtok (NULL, ",")

Quindi, convertire il token per il tipo di dati appropriato. Utilizzando la linea di esempio

1, "test", 3,45

Il codice di analisi per una singola linea sarebbe:

char * tok = strtok (buf, ",");

row.col1 = atoi (tok);

tok = strtok (NULL, ",");

row.col2 = tok;

tok = strtok (NULL, ",");

row.col3 = atof (tok);

13 Fate questo per tutte le voci su ogni riga del CSV. Il "strtok funzione" continuerà a fornire i dati tra i valori da virgola fino all'esaurimento dei dati nel buffer, a quel punto si ritornerà NULL. Questo indica che si è finito con la linea.

Consigli e avvertenze

  • Incapsulare la vostra conversione dei dati in un altro metodo per rendere il codice più leggibile.
  • Il metodo "fgets" restituirà NULL quando il file è stato completamente leggere. Utilizzare questo in un ciclo while per attraversare l'intero file.
  • La funzione "fopen" può restituire NULL se c'è stato un errore - assicuratevi di controllare il file prima di utilizzarlo.
  • In alcuni casi, i token forniti non possono essere del formato previsto. Assicurati di esaminare i dati prima di convertire alla cieca controllando contro i valori di errore comuni (la stringa vuota, NULL, ecc).