Se dokumentationen for det program, der leverer CSV-filen. Bestem antallet af felter i hver linje, samt formatet af hvert felt. For eksempel, hvis et program leverer en CSV med følgende data: 1, "test", 34.5 Du vil markere tre felter: et heltal, en streng og et flydende kommatal.
Opret en struktur, der indeholder et datamedlem for hvert felt, der er identificeret i CSV'en. Ved at bruge den medfølgende eksempellinje med 1, "test", 34.5, har du brug for følgende struktur: struct data { int col1; char *col2; flyde col3; };
Opret en metode i dit program, der håndterer læsning af CSV-filen. Dette skal være tilgængeligt for resten af dit program og vil sandsynligvis skulle arbejde på almindelige datastrukturer, så andre metoder kan få adgang til de data, der er blevet læst ind. Send parameteren ved reference for at fjerne behovet for en returværdi. Et eksempel på en funktionsprototype ville være: void ParseCSV( char *filnavn, data& input );
Opret et filobjekt, som vil læse dataene ind ved hjælp af følgende kode: FILE * pInput;
Opret en tegnbuffer, der er stor nok til at indeholde en linje af filen ad gangen. På grund af sprogets begrænsninger er den mest ligetil måde at gøre dette på at erklære et tegnarray af en tilstrækkelig stor størrelse, som med: #define BUFFER_SIZE 1024
Åbn filen med følgende kode, og tildel den til dit tidligere oprettede FILE-objekt: pInput = fopen("filnavn," "r")
fgets (buf, sizeof (buf), pInput)
Parse CSV'en ved hjælp af funktionen "strtok". Opret en ny tegnstreng for at pege på tokens, og initialiser den med data fra linjen læst ind ovenfor: char *tok = strtok (buf, ",")
Konverter det modtagne token til de relevante data. Ved hjælp af eksempellinjen: 1, "test", 3.45 konverter dataene indeholdt i "tok" til et heltal ved hjælp af følgende kode: row.col1 = atoi (tok);
For efterfølgende læsninger fra samme linje skal du sende "strtok" en NULL-parameter i stedet for bufferstrengen, du læste ind før: tok = strtok (NULL, ",""). Konverter derefter tokenet til den relevante datatype. Ved at bruge eksemplet linje 1,"test",3.45. Parsingkoden for en enkelt linje ville være: char *tok = strtok (buf, ","); række.col1 = atoi (tok); tok = strtok (NULL, ","); række.kol2 = tok; tok = strtok (NULL, ","); række.col3 = atof (tok);
Gør dette for alle indtastningerne på hver linje i CSV'en. Funktionen "strtok" vil fortsætte med at levere data mellem kommaværdier, indtil den løber tør for data i bufferen, hvorefter den returnerer NULL. Dette vil indikere, at du er færdig med linjen.
Advarsel
Funktionen "fopen" kan returnere NULL, hvis der var en fejl - sørg for at tjekke din fil, før du bruger den. I nogle tilfælde er de angivne tokens muligvis ikke af det forventede format. Sørg for at undersøge dine data, før du blindt konverterer ved at kontrollere mod almindelige fejlværdier (den tomme streng, NULL osv.).