Pozrite si dokumentáciu k programu, ktorý poskytuje súbor CSV. Určite počet polí v každom riadku, ako aj formát každého poľa. Napríklad, ak program poskytuje CSV s nasledujúcimi údajmi: 1, "test", 34.5 Označili by ste tri polia: jedno celé číslo, jeden reťazec a jedno číslo s pohyblivou rádovou čiarkou.
Vytvorte štruktúru obsahujúcu údajový člen pre každé pole identifikované v CSV. Pomocou poskytnutého príkladu riadku 1, "test", 34.5 by ste potrebovali nasledujúcu štruktúru: struct data { int col1; char *col2; float col3; };
Vytvorte vo svojom programe metódu, ktorá zvládne čítanie súboru CSV. Toto bude musieť byť prístupné pre zvyšok vášho programu a pravdepodobne bude potrebné pracovať na spoločných dátových štruktúrach, aby iné metódy mali prístup k údajom, ktoré boli načítané. Odovzdajte parameter odkazom, aby ste odstránili potrebu návratovej hodnoty. Príklad prototypu funkcie by bol: void ParseCSV( char *názov súboru, údaje& vstup );
Vytvorte objekt súboru, ktorý bude čítať údaje, pomocou nasledujúceho kódu: FILE * pInput;
Vytvorte dostatočne veľkú vyrovnávaciu pamäť znakov, aby sa do nej zmestil jeden riadok súboru. Kvôli obmedzeniam jazyka je najjednoduchším spôsobom, ako to urobiť, deklarovať pole znakov dostatočne veľkej veľkosti, ako napríklad: #define BUFFER_SIZE 1024
Otvorte súbor s nasledujúcim kódom a priraďte ho k predtým vytvorenému objektu FILE: pInput = fopen("filename," "r")
fgets (buf, sizeof (buf), pInput)
Analyzujte CSV pomocou funkcie "strtok". Vytvorte nový reťazec znakov, ktorý ukáže na tokeny, a inicializujte ho údajmi z riadku načítaného vyššie: char *tok = strtok (buf, ",")
Premeňte prijatý token na príslušné údaje. Pomocou príkladu riadku: 1, "test", 3.45 skonvertujte údaje obsiahnuté v "tok" na celé číslo pomocou nasledujúceho kódu: row.col1 = atoi (tok);
Pre ďalšie čítania z toho istého riadku zadajte "strtok" parameter NULL namiesto reťazca vyrovnávacej pamäte, ktorý ste predtým načítali: tok = strtok (NULL, ",") Potom skonvertujte token na príslušný typ údajov. Pomocou príkladu riadku 1,"test",3.45 Kód analýzy pre jeden riadok by bol: char *tok = strtok (buf, ","); rad.col1 = atoi (tok); tok = strtok (NULL, ","); riadok.col2 = tok; tok = strtok (NULL, ","); riadok.col3 = atof (tok);
Urobte to pre všetky položky v každom riadku súboru CSV. Funkcia "strtok" bude pokračovať v poskytovaní údajov medzi hodnotami čiarkami, kým sa jej neminú údaje vo vyrovnávacej pamäti, kedy vráti hodnotu NULL. To bude znamenať, že ste s čiarou skončili.
Pozor
Funkcia "fopen" môže vrátiť hodnotu NULL, ak sa vyskytla chyba - pred použitím skontrolujte svoj súbor. V niektorých prípadoch poskytnuté tokeny nemusia mať očakávaný formát. Pred slepou konverziou skontrolujte svoje údaje tak, že skontrolujete bežné chybové hodnoty (prázdny reťazec, NULL atď.).