CSV-fájl olvasása C-ben

Tekintse meg a CSV-fájlt biztosító program dokumentációját. Határozza meg az egyes sorokban lévő mezők számát, valamint az egyes mezők formátumát. Például, ha egy program a következő adatokat tartalmazza egy CSV-fájlban: 1, "teszt", 34.5 Három mezőt kell megjelölnie: egy egész számot, egy karakterláncot és egy lebegőpontos számot.

Hozzon létre egy adattagot tartalmazó struktúrát minden CSV-fájlban azonosított mezőhöz. Az 1-es példasort használva, a "teszt", 34.5 a következő struktúrára lesz szüksége: struct data { int col1; char *col2; float col3; };

Hozzon létre egy metódust a programban, amely kezeli a CSV-fájl olvasását. Ennek elérhetőnek kell lennie a program többi része számára, és valószínűleg közös adatstruktúrákon kell dolgoznia, hogy más módszerek is hozzáférhessenek a beolvasott adatokhoz. Adja át a paramétert hivatkozással, hogy ne legyen szükség visszatérési értékre. Példa a függvény prototípusára: void ParseCSV( char *fájlnév, adat& bemenet );

Hozzon létre egy fájlobjektumot, amely beolvassa az adatokat a következő kóddal: FILE * pInput;

Hozzon létre egy elég nagy karakterpuffert ahhoz, hogy egyszerre a fájl egy sorát tárolja. A nyelv korlátai miatt ennek legegyszerűbb módja egy kellően nagy méretű karaktertömb deklarálása, például: #define BUFFER_SIZE 1024

Nyissa meg a fájlt a következő kóddal, és rendelje hozzá a korábban létrehozott FILE objektumhoz: pInput = fopen("fájlnév", "r")

fgets (buf, sizeof (buf), pInput)

Elemezze a CSV-fájlt az „strtok” függvény segítségével. Hozzon létre egy új karakterláncot, amely a tokenekre mutat, és inicializálja a fenti sorból származó adatokkal: char *tok = strtok (buf, ",")

Konvertálja a kapott tokent a megfelelő adatokká. A példasor segítségével: 1, "teszt", 3.45 konvertálja a "tok"-ban található adatokat egész számmá a következő kóddal: row.col1 = atoi (tok);

Az ugyanabból a sorból történő további olvasáshoz adjon át "strtok" egy NULL paramétert az előzőleg beolvasott pufferkarakterlánc helyett: tok = strtok (NULL, ",") Ezután alakítsa át a tokent a megfelelő adattípusra. Az 1. "test",3.45 példasor használatával Az egyetlen sor értelmező kódja a következő lenne: char *tok = strtok (buf, ","); sor.col1 = atoi (tok); tok = strtok (NULL, ","); sor.col2 = tok; tok = strtok (NULL, ","); sor.col3 = atof (tok);

Tegye ezt a CSV minden sorában található összes bejegyzéshez. Az "strtok" függvény továbbra is biztosítja a vesszők közötti adatokat, amíg ki nem fogy a pufferből, ekkor NULL értéket ad vissza. Ez azt jelzi, hogy befejezte a sort.

Figyelem

Az "fopen" függvény NULL értéket adhat vissza, ha hiba történt – használat előtt ellenőrizze a fájlt. Egyes esetekben előfordulhat, hogy a megadott tokenek nem a várt formátumúak. A vak konvertálás előtt feltétlenül vizsgálja meg adatait a gyakori hibaértékek (üres karakterlánc, NULL stb.) alapján.