C:
Työskentely CSV:n kanssa
Miten:
CSV-tiedostojen lukeminen
Luetaan CSV-tiedosto C-kielellä käyttämällä standardin tiedosto I/O -funktioita yhdessä merkkijonojen käsittelyfunktioiden kanssa jokaisen rivin jäsentämiseksi. Alla on perusesimerkki CSV-tiedoston lukemisesta ja jokaisen rivin kenttien tulostamisesta konsoliin.
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp = fopen("data.csv", "r");
if (!fp) {
printf("Can't open file\n");
return 1;
}
char buf[1024];
while (fgets(buf, 1024, fp)) {
char *field = strtok(buf, ",");
while(field) {
printf("%s\n", field);
field = strtok(NULL, ",");
}
}
fclose(fp);
return 0;
}
Esimerkki data.csv
:
Name,Age,Occupation
John Doe,29,Software Engineer
Esimerkkitulo:
Name
Age
Occupation
John Doe
29
Software Engineer
Kirjoittaminen CSV-tiedostoihin
Vastaavasti CSV-tiedostoon kirjoittaminen sisältää fprintf
käytön datan tallentamiseksi pilkuin erotetussa muodossa.
#include <stdio.h>
int main() {
FILE *fp = fopen("output.csv", "w");
if (!fp) {
printf("Can't open file\n");
return 1;
}
char *headers[] = {"Name", "Age", "Occupation", NULL};
for (int i = 0; headers[i] != NULL; i++) {
fprintf(fp, "%s%s", headers[i], (headers[i+1] != NULL) ? "," : "\n");
}
fprintf(fp, "%s,%d,%s\n", "Jane Doe", 27, "Data Scientist");
fclose(fp);
return 0;
}
Esimerkki output.csv
Sisältö:
Name,Age,Occupation
Jane Doe,27,Data Scientist
Syväsukellus
CSV-muoto, vaikkakin näennäisen suoraviivainen, sisältää hienovaraisuuksia, kuten kentissä esiintyvien pilkkujen käsittely ja kenttien sulkeminen lainausmerkeillä. Esitetyt perusesimerkit eivät huomioi tällaisia monimutkaisuuksia, eivätkä käsittele potentiaalisia virheitä robustisti.
Historiallisesti CSV-käsittely C-kielessä on suurelta osin ollut manuaalista johtuen kielen matalan tason luonteesta ja korkean tason abstraktioiden puutteesta tällaisiin tehtäviin. Tämä manuaalinen hallinta sisältää tiedostojen avaamisen, rivien lukemisen, merkkijonojen jakamisen ja tarpeen mukaan datatyyppien muuntamisen.
Vaikka suoranainen CSV-tiedostojen käsittely C-kielessä tarjoaa arvokkaita oppimiskokemuksia tiedosto I/O:sta ja merkkijonojen käsittelystä, useat modernit vaihtoehdot lupaavat tehokkuutta ja vähemmän virhealttiita prosesseja. Kirjastot kuten libcsv
ja csv-parser
tarjoavat kattavia funktioita CSV-tiedostojen lukemiseen ja kirjoittamiseen, mukaan lukien tuki lainausmerkeillä erotetuille kentille ja mukautetuille erottimille.
Vaihtoehtoisesti, kun työskennellään ekosysteemeissä, jotka sitä tukevat, yhdistäminen kielten tai alustojen kanssa, jotka tarjoavat korkean tason CSV-käsittelytoimintoja (kuten Python sen pandas
-kirjaston kanssa), voi olla tuottavampi reitti sovelluksille, jotka vaativat runsasta CSV-käsittelyä. Tämä ristiinkielen lähestymistapa hyödyntää C:n suorituskykyä ja järjestelmäohjelmoinnin ominaisuuksia samalla kun käyttää hyödyksi muiden kielten käyttöhelppoutta erityistehtävissä, kuten CSV-käsittelyssä.