Hoe een CSV-bestand in C. te lezen

Raadpleeg de documentatie van het programma dat het CSV-bestand levert. Bepaal het aantal velden in elke regel, evenals het formaat van elk veld. Als een programma bijvoorbeeld een CSV levert met de volgende gegevens: 1, "test", 34.5, markeert u drie velden: één geheel getal, één tekenreeks en één getal met drijvende komma.

Maak een structuur met een gegevenslid voor elk veld dat in de CSV is geïdentificeerd. Met behulp van de gegeven voorbeeldregel van 1, "test", 34.5 zou u de volgende structuur nodig hebben: struct data { int col1; teken *col2; vlotter col3; };

Maak een methode in uw programma die het lezen van het CSV-bestand zal afhandelen. Dit moet toegankelijk zijn voor de rest van uw programma en zal waarschijnlijk moeten werken aan gemeenschappelijke gegevensstructuren, zodat andere methoden toegang kunnen krijgen tot de gegevens die zijn ingelezen. Geef de parameter door als referentie om de noodzaak voor een retourwaarde te verwijderen. Een voorbeeldfunctieprototype zou zijn: void ParseCSV( char *bestandsnaam, data& input);

Maak een bestandsobject dat de gegevens zal inlezen met behulp van de volgende code: FILE * pInput;

Maak een karakterbuffer die groot genoeg is voor één regel van het bestand tegelijk. Vanwege beperkingen van de taal is de meest eenvoudige manier om dit te doen het declareren van een tekenreeks van een voldoende grote grootte, zoals met: #define BUFFER_SIZE 1024

Open het bestand met de volgende code en wijs het toe aan uw eerder gemaakte FILE-object: pInput = fopen("filename," "r")

fgets (buf, sizeof (buf), pInput)

Parseer de CSV met behulp van de functie "strtok". Maak een nieuwe tekenreeks om naar de tokens te wijzen en initialiseer deze met gegevens van de regel die hierboven is ingelezen: char *tok = strtok (buf, ",")

Converteer het ontvangen token naar de juiste gegevens. Gebruik de voorbeeldregel: 1, "test", 3.45 converteer de gegevens in "tok" naar een geheel getal met de volgende code: row.col1 = atoi (tok);

Voor volgende leesbewerkingen van dezelfde regel, geeft u "strtok" een NULL-parameter door in plaats van de bufferreeks die u eerder hebt ingelezen: tok = strtok (NULL, ",") Converteer vervolgens het token naar het juiste gegevenstype. Gebruik makend van de voorbeeldregel 1,"test",3.45 De parseercode voor een enkele regel zou zijn: char *tok = strtok (buf, ","); rij.col1 = atoi (tok); tok = strtok (NULL, ","); rij.col2 = tok; tok = strtok (NULL, ","); rij.col3 = atof (tok);

Doe dit voor alle vermeldingen op elke regel van de CSV. De functie "strtok" blijft de gegevens tussen kommawaarden leveren totdat de gegevens in de buffer opraken, waarna het NULL retourneert. Dit geeft aan dat u klaar bent met de regel.

Waarschuwing

De functie "fopen" kan NULL retourneren als er een fout is opgetreden - controleer uw bestand voordat u het gebruikt. In sommige gevallen hebben de verstrekte tokens mogelijk niet het verwachte formaat. Zorg ervoor dat u uw gegevens onderzoekt voordat u blindelings converteert door te controleren op veelvoorkomende foutwaarden (de lege tekenreeks, NULL, enz.).