Slik leser du en CSV-fil i C

Slik leser du en CSV-fil i C


Mange programvareprodukter som omhandler tall og beregninger har muligheten til å presentere data i en kommadelte (CSV). Dette formatet kan være en effektiv måte å transportere data mellom ulike programmer, som det er lesbar og ganske lett å manipulere. Mange C-programmer som omhandler data vil sannsynligvis nødt til å lese fra en CSV-fil på noen punkt.

Bruksanvisning

1 Se dokumentasjonen for programmet som leverer CSV-filen. Bestem antall felt i hver linje, samt formatet for 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 en flyttall.

2 Skape en struktur som inneholder en data medlem for hvert felt identifisert i CSV. Ved hjelp av den medfølgende eksempel linje med en "test", 34,5 du vil trenge følgende struktur:

struct data

{

int col1;

char * col2;

flyte kol3;

};

3 Lag en metode i programmet som vil håndtere lese CSV-filen. Dette må være tilgjengelig for resten av programmet, og vil trolig må jobbe med vanlige datastrukturer slik at andre metoder kan få tilgang til data som har blitt lest i. Før parameter ved henvisning til fjerne behovet for en returverdi . Et eksempel funksjon prototype vil bli:

ugyldig ParseCSV (char * filnavn, data og innspill);

4 Inkluder standard IO header ved hjelp av følgende kode:

inkludere <stdio.h>

Legg denne koden til toppen av kildefilen som skal lese CSV.

5 Inkluder strengen biblioteket for å muliggjøre manipulering av CSV-data ved hjelp av følgende kode:

inkluderer <string.h>

Legg denne koden til toppen av kildefilen som skal lese CSV.

6 Lag en fil objekt, som vil lese i data, ved hjelp av følgende kode:

FIL * pInput;

7 Lag en karakter buffer stor nok til å holde en linje av fil om gangen. På grunn av begrensninger i språket, er den enkleste måten å gjøre dette på er å erklære en karakter rekke en tilstrekkelig stor størrelse, som med:

definere BUFFER_SIZE 1024

char buf [BUFFER_SIZE];

8 Åpne filen med følgende kode, og tilordne den til din tidligere opprettet FIL objekt:

pInput = fopen ( "filnavn", "r")

9 Les i en linje av filen ved hjelp av følgende kode:

fgets (buf, sizeof (buf), pInput)

10 Analysere CSV ved hjelp av funksjonen "strtok". Opprett en ny tegnstreng å peke på de symboler, og initialisere den med data fra linjen lese i ovenfor:

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

11 Konverter mottatt token inn de riktige dataene. Med eksempelet linjen:

1, "test", 3,45

konvertere dataene i "Tok" til et heltall ved hjelp av følgende kode:

row.col1 = atoi (TOK);

12 For påfølgende leser fra samme linje, pass "strtok" en NULL parameter i stedet for buffer strengen du leser i før:

Tok = strtok (NULL, ",")

Deretter konvertere token til riktig datatype. Med eksempelet linjen

1, "test", 3,45

Analysekoden for en enkelt linje vil være:

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

row.col1 = atoi (TOK);

Tok = strtok (NULL ",");

row.col2 = Tok;

Tok = strtok (NULL ",");

row.col3 = atof (TOK);

1. 3 Gjør dette for alle oppføringer på hver linje av CSV. Funksjonen "strtok" vil fortsette å gi data mellom komma verdier før den går tom for data i bufferen, og da det vil returnere NULL. Dette vil indikere at du er ferdig med linjen.

Hint

  • Kapsle inn data konvertering til en annen metode for å gjøre koden mer lesbar.
  • Den "fgets" metoden vil returnere NULL når filen har blitt fullstendig lest. Bruk dette på en stund loop for å traversere hele filen.
  • Funksjonen "fopen" kan returnere NULL hvis det var en feil - sørg for å sjekke filen før du bruker den.
  • I noen tilfeller kan de symboler som oppgis ikke være av den forventede format. Sørg for å undersøke dataene før blindt konvertering ved å sjekke mot vanlige feilverdier (den tomme strengen, NULL, etc).