Se dokumentasjonen til programmet som leverer CSV-filen. Bestem antall felt i hver linje, samt formatet til hvert felt. For eksempel, hvis et program gir en CSV med følgende data: 1, "test", 34.5 Du vil merke ned tre felt: ett heltall, en streng og ett flyttall.
Lag en struktur som inneholder et datamedlem for hvert felt identifisert i CSV-en. Ved å bruke eksempellinjen med 1, "test", 34.5, trenger du følgende struktur: struct data { int col1; char *col2; flyte col3; };
Lag en metode i programmet som vil håndtere lesing av CSV-filen. Dette må være tilgjengelig for resten av programmet ditt, og vil sannsynligvis trenge å fungere på vanlige datastrukturer slik at andre metoder kan få tilgang til dataene som er lest inn. Send parameteren ved referanse for å fjerne behovet for en returverdi. Et eksempel på funksjonsprototype vil være: void ParseCSV( char *filnavn, data& input );
Lag et filobjekt som vil lese inn dataene ved å bruke følgende kode: FILE * pInput;
Lag en tegnbuffer som er stor nok til å inneholde én linje av filen om gangen. På grunn av språkets begrensninger er den enkleste måten å gjøre dette på å erklære en tegnarray av tilstrekkelig stor størrelse, som med: #define BUFFER_SIZE 1024
Åpne filen med følgende kode, og tilordne den til ditt tidligere opprettede FILE-objekt: pInput = fopen("filnavn," "r")
fgets (buf, sizeof (buf), pInput)
Parse CSV-en ved å bruke funksjonen "strtok". Lag en ny tegnstreng for å peke på tokenene, og initialiser den med data fra linjen som er lest inn ovenfor: char *tok = strtok (buf, ",")
Konverter det mottatte tokenet til de riktige dataene. Ved å bruke eksempellinjen: 1, "test", 3.45 konverterer dataene i "tok" til et heltall ved å bruke følgende kode: row.col1 = atoi (tok);
For påfølgende lesninger fra samme linje, send "strtok" en NULL-parameter i stedet for bufferstrengen du leste inn før: tok = strtok (NULL, ","") Deretter konverterer du tokenet til riktig datatype. Ved å bruke eksempellinje 1,"test",3.45. Parsingkoden for en enkelt linje vil være: char *tok = strtok (buf, ","); rad.col1 = atoi (tok); tok = strtok (NULL, ","); rad.kol2 = tok; tok = strtok (NULL, ","); rad.kol3 = atof (tok);
Gjør dette for alle oppføringene på hver linje i CSV-filen. Funksjonen "strtok" vil fortsette å gi dataene mellom kommaverdier til den går tom for data i bufferen, på hvilket tidspunkt den returnerer NULL. Dette vil indikere at du er ferdig med linjen.
Advarsel
Funksjonen "fopen" kan returnere NULL hvis det var en feil - sørg for å sjekke filen før du bruker den. I noen tilfeller kan det hende at de angitte tokenene ikke har det forventede formatet. Sørg for å undersøke dataene dine før blindkonvertering ved å sjekke mot vanlige feilverdier (den tomme strengen, NULL, osv.).