C:
Praca z plikami CSV
Jak:
Odczytywanie plików CSV
Aby odczytać plik CSV w języku C, używamy standardowych funkcji wejścia/wyjścia plików wraz z funkcjami manipulacji ciągami znaków do parsowania każdej linii. Poniżej znajduje się podstawowy przykład odczytu pliku CSV i wyświetlania pól każdego wiersza na konsoli.
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp = fopen("dane.csv", "r");
if (!fp) {
printf("Nie można otworzyć pliku\n");
return 1;
}
char buf[1024];
while (fgets(buf, 1024, fp)) {
char *pole = strtok(buf, ",");
while(pole) {
printf("%s\n", pole);
pole = strtok(NULL, ",");
}
}
fclose(fp);
return 0;
}
Przykładowy dane.csv
:
Imię,Wiek,Zawód
John Doe,29,Inżynier oprogramowania
Przykładowy wynik:
Imię
Wiek
Zawód
John Doe
29
Inżynier oprogramowania
Zapisywanie do plików CSV
Podobnie, zapis do pliku CSV wiąże się z użyciem fprintf
do zapisu danych w formacie oddzielonym przecinkami.
#include <stdio.h>
int main() {
FILE *fp = fopen("wynik.csv", "w");
if (!fp) {
printf("Nie można otworzyć pliku\n");
return 1;
}
char *nagłówki[] = {"Imię", "Wiek", "Zawód", NULL};
for (int i = 0; nagłówki[i] != NULL; i++) {
fprintf(fp, "%s%s", nagłówki[i], (nagłówki[i+1] != NULL) ? "," : "\n");
}
fprintf(fp, "%s,%d,%s\n", "Jane Doe", 27, "Naukowiec danych");
fclose(fp);
return 0;
}
Przykładowa zawartość wynik.csv
:
Imię,Wiek,Zawód
Jane Doe,27,Naukowiec danych
Szczegółowa analiza
Format CSV, mimo że wydaje się prosty, kryje w sobie niuanse, takie jak obsługa przecinków w polach oraz otaczanie pól cudzysłowami. Pokazane przykładowe przykłady nie uwzględniają takich złożoności, ani nie obsługują błędów w sposób niezawodny.
Historycznie rzecz biorąc, obsługa plików CSV w C była w dużej mierze ręczna ze względu na niskopoziomową naturę języka oraz brak wbudowanych wysokopoziomowych abstrakcji dla takich zadań. Ta ręczna obsługa obejmuje otwieranie plików, czytanie linii, dzielenie ciągów znaków i konwertowanie typów danych w razie potrzeby.
Chociaż bezpośrednia manipulacja plikami CSV w C dostarcza cenne doświadczenia z zakresu wejścia/wyjścia plików i obsługi ciągów znaków, istnieje kilka nowoczesnych alternatyw obiecujących większą wydajność i mniej podatność na błędy. Biblioteki takie jak libcsv
i csv-parser
oferują kompleksowe funkcje do odczytu i zapisu plików CSV, w tym wsparcie dla pól otoczonych cudzysłowami i niestandardowych separatorów.
Alternatywnie, przy pracy w ekosystemach, które to wspierają, integracja z językami lub platformami oferującymi wysokopoziomowe funkcje manipulacji plikami CSV (takie jak Python z biblioteką pandas
) może być bardziej produktywną drogą dla aplikacji wymagających intensywnej obróbki plików CSV. To podejście międzyjęzykowe wykorzystuje wydajność C oraz możliwości programowania systemowego, przy jednoczesnym wykorzystaniu łatwości użytkowania z innych języków do konkretnych zadań, takich jak obsługa CSV.