Jak czytać plik CSV w C

click fraud protection

Zapoznaj się z dokumentacją programu dostarczającego plik CSV. Określ liczbę pól w każdym wierszu, a także format każdego pola. Na przykład, jeśli program dostarcza plik CSV z następującymi danymi: 1, „test”, 34.5 Należy zaznaczyć trzy pola: jedną liczbę całkowitą, jeden łańcuch i jedną liczbę zmiennoprzecinkową.

Utwórz strukturę zawierającą element danych dla każdego pola zidentyfikowanego w pliku CSV. Korzystając z podanego przykładu wiersza 1, „test”, 34,5, potrzebujesz następującej struktury: struct data { int col1; char *kol2; pływak kol3; };

Utwórz w swoim programie metodę, która obsłuży odczytanie pliku CSV. Będzie to musiało być dostępne dla reszty programu i prawdopodobnie będzie wymagało pracy na wspólnych strukturach danych, aby inne metody mogły uzyskać dostęp do danych, które zostały wczytane. Przekaż parametr przez odwołanie, aby usunąć potrzebę wartości zwracanej. Przykładowy prototyp funkcji to: void ParseCSV( char *nazwapliku, dane& dane wejściowe);

Utwórz obiekt plikowy, który wczyta dane, używając następującego kodu: FILE * pInput;

Utwórz bufor znaków wystarczająco duży, aby pomieścić jeden wiersz pliku naraz. Ze względu na ograniczenia języka, najprostszym sposobem, aby to zrobić, jest zadeklarowanie tablicy znaków o wystarczająco dużym rozmiarze, jak w przypadku: #define BUFFER_SIZE 1024

Otwórz plik z następującym kodem i przypisz go do wcześniej utworzonego obiektu FILE: pInput = fopen("nazwa pliku", "r")

fgets (buf, sizeof (buf), pInput)

Przeanalizuj plik CSV za pomocą funkcji „strtok”. Utwórz nowy ciąg znaków wskazujący na tokeny i zainicjuj go danymi z wiersza odczytanego powyżej: char *tok = strtok (buf, ",")

Przekonwertuj otrzymany token na odpowiednie dane. Korzystając z przykładowego wiersza: 1, "test", 3.45 przekształć dane zawarte w "tok" na liczbę całkowitą, używając następującego kodu: row.col1 = atoi (tok);

W przypadku kolejnych odczytów z tego samego wiersza należy przekazać parametr „strtok” NULL zamiast wczytanego wcześniej ciągu bufora: tok = strtok (NULL, ",") Następnie przekonwertuj token na odpowiedni typ danych. Korzystając z przykładowego wiersza 1,"test",3.45 Kod parsowania pojedynczego wiersza będzie wyglądał następująco: char *tok = strtok (buf, ","); wiersz.kol1 = atoi (tok); tok = strtok (NULL, ","); wiersz.kol2 = tok; tok = strtok (NULL, ","); wiersz.col3 = atof (tok);

Zrób to dla wszystkich wpisów w każdym wierszu pliku CSV. Funkcja „strtok” będzie nadal dostarczać dane między wartościami przecinków, aż skończą się dane w buforze, w którym to momencie zwróci NULL. Będzie to oznaczać, że skończyłeś z linią.

Ostrzeżenie

Funkcja "fopen" może zwrócić NULL, jeśli wystąpił błąd - upewnij się, że sprawdziłeś plik przed jego użyciem. W niektórych przypadkach dostarczone tokeny mogą nie mieć oczekiwanego formatu. Upewnij się, że sprawdziłeś swoje dane przed ślepą konwersją, sprawdzając typowe wartości błędów (pusty ciąg, NULL itp.).