Många mjukvaruprodukter som hanterar siffror och beräkningar har möjlighet att mata ut data i en CSV-fil (Comma Separated Value). Detta format kan vara ett effektivt sätt att transportera data mellan olika program, eftersom det är läsbart och ganska lätt att hantera. Många C-program som hanterar data kommer sannolikt att behöva läsa från en CSV-fil vid någon tidpunkt.

...

Steg 1

Se dokumentationen för programmet som tillhandahåller CSV-filen. Bestäm antalet fält i varje rad samt formatet för varje fält. Om till exempel ett program förser en CSV med följande data: 1, "test", 34.5. Du markerar tre fält: ett heltal, en sträng och ett flytande punktnummer.

Steg 2

Skapa en struktur som innehåller en datamedlem för varje fält som identifieras i CSV. Med hjälp av den medföljande exempelrad 1, "test", 34.5, skulle du behöva följande struktur: strukturdata {int col1; char * col2; float col3; };

Steg 3

Skapa en metod i ditt program som hanterar läsning av CSV-filen. Detta måste vara tillgängligt för resten av ditt program och kommer troligen att behöva arbeta med vanliga datastrukturer så att andra metoder kan få åtkomst till de data som har lästs in. Passera parametern med referens för att ta bort behovet av ett returvärde . Ett exempel på funktionen prototyp kan vara: ogiltig ParseCSV (char * filnamn, data & input);

Steg 4

Inkludera standard IO-rubriken med följande kod: #include Lägg till den här koden till toppen av källfilen som kommer att läsa CSV.

Steg 5

Inkludera strängbiblioteket för att möjliggöra manipulation av CSV-data med följande kod: #includeLägg den här koden till toppen av källfilen som kommer att läsa CSV.

Steg 6

Skapa ett filobjekt som kommer att läsas in med hjälp av följande kod: FIL * pInput;

Steg 7

Skapa en teckenbuffert som är tillräckligt stor för att hålla en rad i filen åt gången. På grund av språkets begränsningar är det enklaste sättet att göra detta att förklara en karaktärsuppsättning av tillräckligt stor storlek, som med: #define BUFFER_SIZE 1024

char buf [BUFFER_SIZE];

Steg 8

Öppna filen med följande kod och tilldela den till ditt tidigare skapade FILE-objekt: pInput = fopen ("filnamn," "r")

Steg 9

Läs i en rad i filen med följande kod:

fgets (buf, sizeof (buf), pInput)

Steg 10

Analysera CSV med funktionen "strtok". Skapa en ny teckensträng för att peka på tokens och initiera den med data från raden som läses in ovan: char * tok = strtok (buf, ",")

Steg 11

Konvertera det mottagna tokenet till lämplig information. Med hjälp av exempelradet: 1, "test", 3,45 konverterar data som finns i "tok" till ett heltal med följande kod: row.col1 = atoi (tok);

Steg 12

För efterföljande läsningar från samma rad passerar du "strtok" en NULL-parameter istället för buffertsträngen du läste in tidigare: tok = strtok (NULL, ",") Konvertera sedan tokenet till rätt datatyp. Med hjälp av exempelrad 1, "test", 3.45 Tolkningskoden för en enda rad skulle vara: char * tok = strtok (buf, ","); row.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);

Steg 13

Gör detta för alla poster på varje rad i CSV. Funktionen "strtok" kommer att fortsätta att tillhandahålla data mellan kommavärden tills den tar slut på data i bufferten, vid vilken punkt den kommer att returnera NULL. Detta indikerar att du är klar med raden.