Cum să citiți un fișier CSV în C

click fraud protection

Consultați documentația programului care furnizează fișierul CSV. Determinați numărul de câmpuri din fiecare linie, precum și formatul fiecărui câmp. De exemplu, dacă un program furnizează un CSV cu următoarele date: 1, „test”, 34.5, veți marca trei câmpuri: un număr întreg, un șir și un număr în virgulă mobilă.

Creați o structură care să conțină un membru de date pentru fiecare câmp identificat în CSV. Folosind exemplul oferit de linia 1, „test”, 34.5, veți avea nevoie de următoarea structură: struct data { int col1; char *col2; float col3; };

Creați o metodă în programul dvs. care se va ocupa de citirea fișierului CSV. Acesta va trebui să fie accesibil pentru restul programului și probabil va trebui să lucreze pe structuri de date comune, astfel încât alte metode să poată accesa datele care au fost citite. Transmiteți parametrul prin referință pentru a elimina necesitatea unei valori returnate. Un exemplu de prototip de funcție ar fi: void ParseCSV( char *nume fișier, date& input );

Creați un obiect fișier, care va citi în date, folosind următorul cod: FILE * pInput;

Creați un buffer de caractere suficient de mare pentru a păstra o linie a fișierului odată. Din cauza constrângerilor limbajului, cel mai simplu mod de a face acest lucru este să declarați o matrice de caractere de o dimensiune suficient de mare, ca și în cazul: #define BUFFER_SIZE 1024

Deschideți fișierul cu următorul cod și atribuiți-l obiectului FILE creat anterior: pInput = fopen ("nume fișier," "r")

fgets (buf, sizeof (buf), pInput)

Analizați CSV folosind funcția „strtok”. Creați un șir de caractere nou pentru a indica jetoane și inițializați-l cu datele din linia citită mai sus: char *tok = strtok (buf, ",")

Convertiți simbolul primit în datele corespunzătoare. Folosind linia exemplu: 1, „test”, 3.45 convertește datele conținute în „tok” într-un număr întreg folosind următorul cod: row.col1 = atoi (tok);

Pentru citirile ulterioare din aceeași linie, transmiteți „strtok” un parametru NULL în loc de șirul de buffer pe care l-ați citit înainte: tok = strtok (NULL, ",") Apoi, convertiți jetonul la tipul de date corespunzător. Folosind exemplul de linie 1,"test",3.45 Codul de analiză pentru o singură linie ar fi: char *tok = strtok (buf, ","); rând.col1 = atoi (tok); tok = strtok (NULL, ","); rând.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);

Faceți acest lucru pentru toate intrările de pe fiecare linie a CSV. Funcția „strtok” va continua să furnizeze datele între valorile prin virgulă până când va epuiza datele din buffer, moment în care va returna NULL. Acest lucru va indica că ați terminat cu linia.

Avertizare

Funcția „fopen” poate returna NULL dacă a apărut o eroare - asigurați-vă că verificați fișierul înainte de a-l folosi. În unele cazuri, jetoanele furnizate pot să nu aibă formatul așteptat. Asigurați-vă că vă examinați datele înainte de a efectua conversia orbește, verificând valorile de eroare obișnuite (șirul gol, NULL etc.).