CSV-tiedoston lukeminen C: ssä

Katso CSV-tiedoston toimittavan ohjelman dokumentaatio. Määritä kunkin rivin kenttien lukumäärä sekä kunkin kentän muoto. Jos ohjelma tarjoaa esimerkiksi CSV-tiedoston, jossa on seuraavat tiedot: 1, "testi", 34.5 Merkitset kolme kenttää: yksi kokonaisluku, yksi merkkijono ja yksi liukuluku.

Luo rakenne, joka sisältää datajäsenen jokaiselle CSV: ssä tunnistetulle kentälle. Käyttämällä annettua esimerkkiriviä 1, "test", 34.5, tarvitset seuraavan rakenteen: struct data { int col1; char *col2; kellua col3; };

Luo ohjelmaan menetelmä, joka käsittelee CSV-tiedoston lukemisen. Tämän on oltava muun ohjelmasi käytettävissä, ja sen on todennäköisesti toimittava yleisten tietorakenteiden parissa, jotta muut menetelmät voivat päästä sisään luettuihin tietoihin. Välitä parametri viittauksella poistaaksesi palautusarvon tarpeen. Esimerkkifunktion prototyyppi olisi: void ParseCSV( char *tiedostonimi, data& syöttö );

Luo tiedostoobjekti, joka lukee tiedot, käyttämällä seuraavaa koodia: FILE * pInput;

Luo riittävän suuri merkkipuskuri, jotta siihen mahtuu yksi tiedoston rivi kerrallaan. Kielen rajoituksista johtuen yksinkertaisin tapa tehdä tämä on ilmoittaa riittävän suuri merkkijono, kuten: #define BUFFER_SIZE 1024

Avaa tiedosto seuraavalla koodilla ja määritä se aiemmin luodulle FILE-objektille: pInput = fopen("tiedostonimi", "r")

fgets (buf, sizeof (buf), pInput)

Jäsennä CSV funktiolla "strtok". Luo uusi merkkijono osoittamaan tokeneita ja alusta se yllä luetun rivin tiedoilla: char *tok = strtok (buf, ",")

Muunna vastaanotettu tunnus sopiviksi tiedoiksi. Käytä esimerkkiriviä: 1, "test", 3.45 muuntaa "tok":n sisältämät tiedot kokonaisluvuiksi käyttämällä seuraavaa koodia: rivi.col1 = atoi (tok);

Myöhemmin samalta riviltä luettaessa välitä "strtok" NULL-parametri aiemmin lukemasi puskurimerkkijonon sijaan: tok = strtok (NULL, ",") Muunna sitten merkki sopivaksi tietotyypiksi. Käyttämällä esimerkkiriviä 1"test",3.45 Yhden rivin jäsennyskoodi olisi: char *tok = strtok (buf, ","); rivi.col1 = atoi (tok); tok = strtok (NULL, ","); rivi.col2 = tok; tok = strtok (NULL, ","); rivi.col3 = atof (tok);

Tee tämä kaikille CSV-rivin kohdille. Funktio "strtok" jatkaa tietojen antamista pilkkuarvojen välillä, kunnes sen tiedot loppuvat puskurissa, jolloin se palauttaa arvon NULL. Tämä osoittaa, että olet lopettanut rivin.

Varoitus

Funktio "fopen" voi palauttaa NULL-arvon, jos tapahtui virhe - varmista, että tarkistat tiedostosi ennen sen käyttöä. Joissakin tapauksissa toimitetut tunnukset eivät välttämättä ole odotetussa muodossa. Varmista, että tarkistat tietosi ennen sokeaa muuntamista vertaamalla yleisiä virhearvoja (tyhjä merkkijono, NULL jne.).