Kaip skaityti CSV failą C

Peržiūrėkite programos, kuri teikia CSV failą, dokumentaciją. Nustatykite laukų skaičių kiekvienoje eilutėje, taip pat kiekvieno lauko formatą. Pavyzdžiui, jei programa pateikia CSV failą su šiais duomenimis: 1, "testas", 34.5 Jūs pažymėsite tris laukus: vieną sveikąjį skaičių, vieną eilutę ir vieną slankiojo kablelio skaičių.

Sukurkite struktūrą su duomenų nariu kiekvienam laukui, nurodytam CSV. Naudojant pateiktą 1 pavyzdinę eilutę „testas“, 34.5, jums reikės tokios struktūros: struct data { int col1; char *col2; float col3; };

Savo programoje sukurkite metodą, kuris nuskaitys CSV failą. Tai turės būti pasiekiama likusiai jūsų programos daliai ir tikriausiai reikės dirbti su įprastomis duomenų struktūromis, kad kiti metodai galėtų pasiekti perskaitytus duomenis. Perduokite parametrą pagal nuorodą, kad nereikėtų grąžinti vertės. Funkcijos prototipo pavyzdys būtų: void ParseCSV( char *failo pavadinimas, duomenų ir įvestis );

Sukurkite failo objektą, kuris nuskaitys duomenis, naudodami šį kodą: FILE * pInput;

Sukurkite pakankamai didelį simbolių buferį, kad vienu metu tilptų viena failo eilutė. Dėl kalbos apribojimų paprasčiausias būdas tai padaryti yra deklaruoti pakankamai didelio dydžio simbolių masyvą, kaip: #define BUFFER_SIZE 1024

Atidarykite failą su šiuo kodu ir priskirkite jį anksčiau sukurtam FILE objektui: pInput = fopen("failo pavadinimas", "r")

fgets (buf, sizeof (buf), pInput)

Išanalizuokite CSV naudodami funkciją „strtok“. Sukurkite naują simbolių eilutę, kuri nukreiptų į žetonus, ir inicijuokite ją duomenimis iš eilutės, skaitytos aukščiau: char *tok = strtok (buf, ",")

Konvertuokite gautą prieigos raktą į reikiamus duomenis. Naudodami pavyzdinę eilutę: 1, "testas", 3.45 konvertuokite "tok" esančius duomenis į sveikąjį skaičių naudodami šį kodą: row.col1 = atoi (tok);

Vėlesniems skaitymui iš tos pačios eilutės perduokite "strtok" NULL parametrą, o ne buferio eilutę, kurią perskaitėte anksčiau: tok = strtok (NULL, ",") Tada konvertuokite prieigos raktą į atitinkamą duomenų tipą. Naudojant pavyzdinę eilutę 1"test",3.45 Vienos eilutės analizės kodas būtų toks: char *tok = strtok (buf, ","); eilutė.col1 = atoi (tok); tok = strtok (NULL, ","); eilutė.col2 = tok; tok = strtok (NULL, ","); eilutė.col3 = atof (tok);

Atlikite tai su visais kiekvienos CSV eilutės įrašais. Funkcija „strtok“ ir toliau teiks duomenis tarp kablelio reikšmių, kol buferyje baigsis duomenų, o tada grąžins NULL. Tai parodys, kad baigėte eilutę.

Įspėjimas

Funkcija „fopen“ gali grąžinti NULL, jei įvyko klaida – prieš naudodami patikrinkite failą. Kai kuriais atvejais pateikti žetonai gali būti ne tokio formato, kokio tikimasi. Prieš aklai konvertuodami patikrinkite duomenis, patikrindami, ar nėra dažnų klaidų verčių (tuščia eilutė, NULL ir kt.).