Kako prebrati datoteko CSV v C

click fraud protection

Oglejte si dokumentacijo programa, ki zagotavlja datoteko CSV. Določite število polj v vsaki vrstici in obliko vsakega polja. Na primer, če program zagotovi CSV z naslednjimi podatki: 1, "test", 34.5, bi označili tri polja: eno celo število, en niz in eno število s plavajočo vejico.

Ustvarite strukturo, ki vsebuje podatkovnega člana za vsako polje, identificirano v CSV. Z uporabo navedene vzorčne vrstice 1, "test", 34.5, boste potrebovali naslednjo strukturo: struct data { int col1; char *col2; float col3; };

V svojem programu ustvarite metodo, ki bo obravnavala branje datoteke CSV. To bo moralo biti dostopno preostalemu delu vašega programa in verjetno bo moralo delovati na običajnih podatkovnih strukturah, tako da lahko druge metode dostopajo do podatkov, ki so bili prebrani. Prenesite parameter s sklicevanjem, da odstranite potrebo po vrnjeni vrednosti. Primer prototipa funkcije bi bil: void ParseCSV( char *ime datoteke, podatki& input);

Ustvarite datotečni objekt, ki bo prebral podatke, z uporabo naslednje kode: FILE * pInput;

Ustvarite vmesni pomnilnik znakov, ki je dovolj velik, da vsebuje eno vrstico datoteke naenkrat. Zaradi jezikovnih omejitev je najpreprostejši način za to, da razglasite niz znakov dovolj velike velikosti, na primer: #define BUFFER_SIZE 1024

Odprite datoteko z naslednjo kodo in jo dodelite vašemu predhodno ustvarjenemu objektu FILE: pInput = fopen("ime datoteke," "r")

fgets (buf, sizeof (buf), pInput)

Razčlenite CSV s funkcijo "strtok". Ustvarite nov niz znakov, ki kaže na žetone, in ga inicializirajte s podatki iz zgornje vrstice: char *tok = strtok (buf, ",")

Prejeti žeton pretvorite v ustrezne podatke. Z uporabo vzorčne vrstice: 1, "test", 3.45 pretvorite podatke v "tok" v celo število z uporabo naslednje kode: row.col1 = atoi (tok);

Za nadaljnja branja iz iste vrstice podajte "strtok" parameter NULL namesto niza medpomnilnika, ki ste ga prebrali prej: tok = strtok (NULL, ",") Nato pretvorite žeton v ustrezen tip podatkov. Z uporabo vzorčne vrstice 1,"test",3.45 Koda za razčlenjevanje za eno vrstico bi bila: char *tok = strtok (buf, ","); vrstica.col1 = atoi (tok); tok = strtok (NULL, ","); vrstica.col2 = tok; tok = strtok (NULL, ","); vrstica.col3 = atof (tok);

To storite za vse vnose v vsaki vrstici datoteke CSV. Funkcija "strtok" bo še naprej zagotavljala podatke med vrednostmi vejice, dokler ji ne zmanjka podatkov v medpomnilniku, nakar bo vrnila NULL. To bo pomenilo, da ste končali s črto.

Opozorilo

Funkcija "fopen" lahko vrne NULL, če je prišlo do napake - preverite svojo datoteko, preden jo uporabite. V nekaterih primerih predloženi žetoni morda niso v pričakovani obliki. Pred slepo pretvorbo preverite svoje podatke tako, da jih primerjate s pogostimi vrednostmi napak (prazen niz, NULL itd.).