Schlagen Sie in der Dokumentation des Programms nach, das die CSV-Datei bereitstellt. Bestimmen Sie die Anzahl der Felder in jeder Zeile sowie das Format jedes Felds. Wenn ein Programm beispielsweise eine CSV-Datei mit den folgenden Daten liefert: 1, "test", 34,5 Sie würden drei Felder markieren: eine ganze Zahl, eine Zeichenfolge und eine Gleitkommazahl.
Erstellen Sie eine Struktur mit einem Datenelement für jedes in der CSV identifizierte Feld. Wenn Sie die bereitgestellte Beispielzeile von 1 "test", 34.5 verwenden, benötigen Sie die folgende Struktur: struct data { int col1; char *col2; float col3; };
Erstellen Sie in Ihrem Programm eine Methode, die das Lesen der CSV-Datei handhabt. Dies muss für den Rest Ihres Programms zugänglich sein und muss wahrscheinlich an gemeinsamen Datenstrukturen arbeiten, damit andere Methoden auf die eingelesenen Daten zugreifen können. Übergeben Sie den Parameter als Verweis, um die Notwendigkeit eines Rückgabewerts zu beseitigen. Ein beispielhafter Funktionsprototyp wäre: void ParseCSV( char *filename, data& input );
Erstellen Sie mit folgendem Code ein Dateiobjekt, das die Daten einliest: FILE * pInput;
Erstellen Sie einen Zeichenpuffer, der groß genug ist, um jeweils eine Zeile der Datei aufzunehmen. Aufgrund von Einschränkungen der Sprache ist dies am einfachsten, indem Sie ein ausreichend großes Zeichenarray deklarieren, wie mit: #define BUFFER_SIZE 1024
Öffnen Sie die Datei mit dem folgenden Code und weisen Sie sie Ihrem zuvor erstellten FILE-Objekt zu: pInput = fopen("filename", "r")
fgets (buf, sizeof (buf), pInput)
Analysieren Sie die CSV-Datei mit der Funktion "strtok". Erstellen Sie eine neue Zeichenkette, die auf die Token zeigt, und initialisieren Sie sie mit Daten aus der oben eingelesenen Zeile: char *tok = strtok (buf, ",")
Wandeln Sie das empfangene Token in die entsprechenden Daten um. Verwenden Sie die Beispielzeile: 1, "test", 3.45 wandeln Sie die in "tok" enthaltenen Daten mit dem folgenden Code in eine ganze Zahl um: row.col1 = atoi (tok);
Für nachfolgende Lesevorgänge aus derselben Zeile übergeben Sie "strtok" einen NULL-Parameter anstelle des zuvor eingelesenen Pufferstrings: tok = strtok (NULL, ",") Konvertieren Sie dann das Token in den entsprechenden Datentyp. Verwenden der Beispielzeile 1,"test",3.45 Der Parsing-Code für eine einzelne Zeile wäre: char *tok = strtok (buf, ","); row.col1 = atoi (tok); tok = strtok (NULL, ","); row.col2 = tok; tok = strtok (NULL, ","); row.col3 = atof (tok);
Führen Sie dies für alle Einträge in jeder Zeile der CSV-Datei durch. Die Funktion "strtok" stellt weiterhin die Daten zwischen Kommawerten bereit, bis die Daten im Puffer aufgebraucht sind, und gibt dann NULL zurück. Dies zeigt an, dass Sie mit der Linie fertig sind.
Warnung
Die Funktion "fopen" gibt möglicherweise NULL zurück, wenn ein Fehler aufgetreten ist - überprüfen Sie Ihre Datei, bevor Sie sie verwenden. In einigen Fällen weisen die bereitgestellten Token möglicherweise nicht das erwartete Format auf. Stellen Sie sicher, dass Sie Ihre Daten überprüfen, bevor Sie sie blind konvertieren, indem Sie sie anhand häufiger Fehlerwerte (die leere Zeichenfolge, NULL usw.) überprüfen.